RestTemplate
- 配置
@Configuration
public class RestTemplateConfiguration {
@Bean
public SimpleClientHttpRequestFactory httpClientFactory() {
SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
httpRequestFactory.setReadTimeout(5000);
httpRequestFactory.setConnectTimeout(5000);
return httpRequestFactory;
}
@Bean
public RestTemplate restTemplate(){
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(3000);
requestFactory.setReadTimeout(5000);
RestTemplate restTemplate = new RestTemplate(requestFactory);
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> converter : messageConverters) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
}
}
RestTemplateUtils.setRestTemplate(restTemplate);
return restTemplate;
}
}
- 工具类
public class RestTemplateUtils {
private static Logger log = LoggerFactory.getLogger(RestTemplateUtils.class);
private static RestTemplate restTemplate;
private static final String JPUSH_IDEMPOTENT = "JPUSH:%s:%s";
private static final int EXPIRE_TIME = 60;
public static void setRestTemplate(RestTemplate restTemplate) {
RestTemplateUtils.restTemplate = restTemplate;
}
public static <T> T get(String url,Class<T> t){
return execute(url,null,()-> {
ResponseEntity<T> forEntity = restTemplate.getForEntity(url, t);
return forEntity.getBody();
});
}
public static <T> T get(String url,Class<T> t,Map<String ,?> params){
return execute(url,params,()-> {
ResponseEntity<T> forEntity = restTemplate.getForEntity(url, t, params);
return forEntity.getBody();
});
}
public static <T> T getWithHeader(String url, Class<T> t, Map<String ,String> headersMap) {
return execute(url,headersMap,()-> {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
setHeads(headers, headersMap);
HttpEntity<MultiValueMap> httpEntity = new HttpEntity<>(null, headers);
ResponseEntity<T> forEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, t);
return forEntity.getBody();
});
}
public static <T> T postWithHeader(String url, Class<T> t, LinkedHashMap<String, Object> contentMap, Map<String ,String> headersMap) {
return execute(url,contentMap,()-> {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
setHeads(httpHeaders, headersMap);
HttpEntity<Object> objectHttpEntity = new HttpEntity<>(contentMap, httpHeaders);
ResponseEntity<T> forEntity = restTemplate.postForEntity(url, objectHttpEntity, t);
return forEntity.getBody();
});
}
private static void setHeads(HttpHeaders headers, Map<String, String> headersMap) {
headersMap.forEach(headers::add);
}
public static <T> T post(String url, Class<T> t, JSONObject param){
return execute(url,param,()->{
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Object> objectHttpEntity = new HttpEntity<>(param,httpHeaders);
ResponseEntity<T> forEntity = restTemplate.postForEntity(url, objectHttpEntity, t);
return forEntity.getBody();
});
}
private static <T> T execute(String url,Object param,Supplier<T> supplier){
try{
T t = supplier.get();
log.info("接口==>{},请求参数==>{},响应结果==>{}",url, JSON.toJSONString(param), JSON.toJSONString(t));
return t;
}catch (Exception e){
log.error("调用接口异常==>"+url+",参数==>"+ JSON.toJSONString(param),e);
return null;
}
}
}
- 参数拼接
public static void main(String[] args) {
String url = "http://www.baidu.com";
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
String url2 = builder.queryParam("name", "zgd").build().encode().toString();
System.out.println("url2 = " + url2);
Map<String,Object> param = Maps.newHashMap();
param.put("name","zzz");
param.put("age",123);
param.forEach(builder::queryParam);
String url3 = builder.build().encode().toString();
System.out.println("url3 = " + url3);
}