如何使用注释自动连接 RestTemplate

2022-08-31 13:23:27

当我尝试自动连接Spring RestTemplate时,我收到以下错误:

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.client.RestTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.

在注释驱动的环境中使用 Spring 4。

我的调度程序 servlet 配置如下:

<context:component-scan base-package="in.myproject" />
<mvc:default-servlet-handler />    
<mvc:annotation-driven />
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>

我尝试自动连接 RestTemplate 的类如下所示:

@Service("httpService")
public class HttpServiceImpl implements HttpService {

@Autowired
private RestTemplate restTemplate;

@Override
public void sendUserId(String userId){

    MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
    map.add("userId", userId);
    map.add("secretKey", "kbhyutu7576465duyfy");

    restTemplate.postForObject("http://localhost:8081/api/user", map, null);


    }
}

答案 1

如果未定义 RestTemplate,您将看到的错误

考虑在配置中定义类型为'org.springframework.web.client.RestTemplate'的bean。

未找到类型为 [org.springframework.web.client.RestTemplate] 的合格 Bean

如何通过注释定义 RestTemplate

具体取决于您使用的技术以及哪些版本将影响您在类中定义 a 的方式。RestTemplate@Configuration

弹簧 >= 4 不带弹簧套

只需定义一个 :@Bean

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

弹簧靴 <= 1.3

无需定义一个,Spring Boot会自动为您定义一个。

弹簧靴 >= 1.4

Spring Boot不再自动定义一个,而是定义了一个允许您对所创建的更多控制。您可以在方法中注入 作为参数来创建:RestTemplateRestTemplateBuilderRestTemplateRestTemplateBuilder@BeanRestTemplate

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
   // Do any additional configuration here
   return builder.build();
}

在课堂上使用它

@Autowired
private RestTemplate restTemplate;

@Inject
private RestTemplate restTemplate;

答案 2

您可以将以下方法添加到类中,以提供 RestTemplate 的默认实现:

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

推荐