Restemplate使用之泛型参数

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版权协议,转载请附上原文出处链接和本声明。