隐藏

Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration

发布:2023/9/28 14:46:25作者:管理员 来源:本站 浏览次数:624

错误如下:

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;


 









错误如下:




Consider defining a bean of type


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.


 



Consider defining a bean of type



解决方法:




Consider defining a bean of type


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();

   }

}


  



Consider defining a bean of type



说明:可以封装一个Cinfig类,最主要是红色部分的RestTemplate,当然,可以直接在别的地方注入红色部分代码即可。而且,如果哪个组件上注解了这个方法,其余都可以不用,只是一次注解即可。


解释说明:


以上的代码是从官方的例子代码发现的: https://github.com/spring-cloud/spring-cloud-zookeeper/blob/master/spring-cloud-zookeeper-sample/src/main/java/org/springframework/cloud/zookeeper/sample/SampleZookeeperApplication.java


如果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;