/**
* RestTemplate模板獲取數據
* author:lin
*/
public class RestTemplateUtil {
/** 方法一
* POST請求 去獲取資源
* @param url 跨域的url
* @param map
跨域要發送的參數 MultiValueMap<String,Object> map = new LinkedMultiValueMap<String, Object>();
* @return 返回map對象
*/
public static Map postUrlToMap(String url,MultiValueMap<String,Object> map){
try {
String respon = new RestTemplate().postForObject(url,map,String.class);
//轉成Map對象
Map resultMap = JsonToMapUtil.jsonstrToMap(respon);
return resultMap;
} catch (Exception x) {
x.printStackTrace();
}
return null;
}
/**方法二
* POST請求 去獲取資源
* @param url 跨域的url
* @param map
* 相對於方法一。1.增加了請求頭的編碼。2.以表單方式提交,報錯率低。
* @return 返回map對象
*/
public static Map postUrlBodyToMap(String url,Map<String, Object> map){
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<>(map,httpHeaders);
String responseResultResponseEntity = new RestTemplate().postForObject(url, objectHttpEntity, String.class);
Map resultMap = JsonToMapUtil.jsonstrToMap(responseResultResponseEntity);
return resultMap;
}
/**方法三
* POST請求 去獲取資源
* @param url 跨域的url
* @param map
* 相對於方法二。1.增加了響應的編碼,一般響應編碼可以爲UFT-8。2.增加響應時間限制一分鐘
* @return 返回map對象
*/
public static Map postUrlBodyToMap(String url,Map<String, Object> map,String charset){
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<>(map,httpHeaders);
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
//60s
requestFactory.setConnectTimeout(60*1000);
requestFactory.setReadTimeout(60*1000);
RestTemplate restTemplate = new RestTemplate(requestFactory);
restTemplate.getMessageConverters().add(0,new StringHttpMessageConverter(Charset.forName(charset)));
String responseResultResponseEntity = restTemplate.postForObject(url, objectHttpEntity, String.class);
Map resultMap = JsonToMapUtil.jsonstrToMap(responseResultResponseEntity);
return resultMap;
}
/**
* GET請求 去獲取資源
* @param url 跨域的url
* @param map 跨域要發送的參數 Map<String,Object> map = new HashMap<String, Object>(); 不支持傳實體對象
* @return 返回map對象
*/
public static Map getUrlMap(String url,Map<String,Object> map){
try {
if(map != null){
StringBuffer sb = new StringBuffer();
for(Map.Entry<String,Object> entry:map.entrySet()){
sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&&");
}
String s = sb.toString();
if(s.endsWith("&&")){
s = s.substring(0,s.length()-1);
}
if(url.contains("?")) url += "&&" + s;
else url += "?" + s;
}
String respon = new RestTemplate().getForObject(url,String.class);
//轉化結果
Map result = JsonToMapUtil.jsonstrToMap(respon);
return result;
} catch (Exception x) {
x.printStackTrace();
}
return null;
}
/**
* GET請求 去獲取資源
* @param url 跨域的url
* @return 返回map對象
*/
public static Map getUrlMap(String url){
return getUrlMap(url,null);
}
/**
* 把字符串轉化成對象
* @param jsonStr
* @param t
* @param <T>
* @return
*/
public static <T> List<T> objectToList(String jsonStr, Class<T> t){
return JSONArray.parseArray(jsonStr, t);
}
}