错误如下:
ERROR 31473 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***************************
APPLICATION FAILED TO START
*************************** Description: Field restTemplate in org.springframework.cloud.zookeeper.discovery.dependency.DependencyRestTemplateAutoConfiguration required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found. Action: Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration.
解决方法:
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate; @Configuration
public class Config { @Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
说明:可以封装一个Cinfig类,最主要是红色部分的RestTemplate,当然,可以直接在别的地方注入红色部分代码即可。而且,如果哪个组件上注解了这个方法,其余都可以不用,只是一次注解即可。
解释说明:
如果RestTemplate
没有定义,您将看到错误
Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration.
或者
No qualifying bean of type [org.springframework.web.client.RestTemplate] found
如何通过注解定义RestTemplate
这取决于你使用的是什么版本的技术会影响你如何定义你的“配置类RestTemplate。
Spring >=4且没有Spring Boot
简单地定义一个@Bean
:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Spring Boot<=1.3
无需定义,Spring Boot自动为您定义了一个。
Spring Boot >= 1.4
Spring Boot不再自动定义一个RestTemplate
,而是定义了一个RestTemplateBuilder
允许您更好地控制所RestTemplate
创建的对象。你可以RestTemplateBuilder
在你的@Bean
方法中注入一个参数来创建一个RestTemplate
:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
// Do any additional configuration here
return builder.build();
}
在你的类上使用它
@Autowired
private RestTemplate restTemplate;
或者
@Inject
private RestTemplate restTemplate;
参考:
https://*.com/questions/28024942/how-to-autowire-resttemplate-using-annotations
https://gist.github.com/RealDeanZhao/38821bc1efeb7e2a9bcd554cc06cdf96