1、声明RestTemplate
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
return new RestTemplate(factory);;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(5000);
factory.setConnectTimeout(5000);
return factory;
}
}
注:还可采用自定义线程池的方式来声明对象
2、配置拦截器
1)定义拦截器,实现ClientHttpRequestInterceptor
public class HttpInterceptor implements ClientHttpRequestInterceptor {
private Logger log = LoggerFactory.getLogger(HttpInterceptor.class);
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {
log.info("请求地址:{}", request.getURI());
log.info("请求方法: {}", request.getMethod());
log.info("请求内容:{}", new String(body));
log.info("请求头:{}", request.getHeaders());
return execution.execute(request, body);
}
}
2)添加拦截器,修改生成RestTemplate
的bean
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.getInterceptors().add(new HttpInterceptor());
return restTemplate;
}
3、使用RestTemplate
1)固定类型的方式
Student student = new Student ();
student.setName("1");
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, Student .class);
2)使用泛型接收结果
使用ParameterizedTypeReference实现
ResponseEntity<List<Student>> responseEntity = this.restTemplate
.exchange(LOGIN_URL, HttpMethod.POST,
new HttpEntity<>(login),
new ParameterizedTypeReference<List<Student>>() {
});
版权声明:本文为pinghuqiuyue9原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。