解决多线程RestTemplate修改拦截器null值报错

之前主要使用拦截器添加请求头认证信息,在单线程正常运行,多线程环境则有一定几率在设置拦截器时报错:

RequestEntity<?> request = buildRequest(config, params);

restTemplate.setInterceptors((List<ClientHttpRequestInterceptor>) o ) 

ResponseEntity<Dict> response = restTemplate.exchange(request, Dict.class);

原因出现在:setInterceptors()方法

解决:不使用拦截器添加请求头,请求头在构建请求时添加:

return RequestEntity
    .method(HttpMethod.valueOf(config.getMethod()),resolvedUrl)
    .headers(headers)
    .body(requestMap);

 或者配置默认拦截器,在构建请求时由拦截器动态添加请求头

    @Bean
    RestTemplate restTemplate(HeaderRequestInterceptor headerRequestInterceptor){
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setInterceptors(Collections.singletonList(headerRequestInterceptor));
        return restTemplate;
    }