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