Spring Boot 在非Service类中注入RestTemplate ,获取到的restTemplate为null,出现空指针异常.
代码情况
先在项目config包下添加RestTemplateConfig 配置类
@Configuration
public class RestTemplateConfig {
/**
* 没有实例化RestTemplate时,初始化RestTemplate
*/
@ConditionalOnMissingBean(RestTemplate.class)
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(15000);
factory.setReadTimeout(5000);
return factory;
}
}
我们一般都是将RestTemplate注入到Service里面,但是如果我们RestTemplate注入到一个工具类,当成一个查询的工具使用的时候,我们就不能使用一般的@Autowired注入方式:
@Component
public class MyUtil {
@Autowired
private RestTemplate restTemplate;
public void utilMethod(String url){
//这里获取的restTemplate就为null
String response = restTemplate.getForObject(url, String.class);
}
...
}
解决方法
通过以下方式注入
@Resource
public void setRestTemplate(RestTemplate restTemplate) {
MyUtil.restTemplate = restTemplate;
}
修改后代码
@Component
public class MyUtil {
@Resource
public void setRestTemplate(RestTemplate restTemplate) {
MyUtil.restTemplate = restTemplate;
}
public void utilMethod(String url){
//获取的restTemplate不为null了
String response = restTemplate.getForObject(url, String.class);
}
...
}