/**
* 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);
}
}