java - getforobject - resttemplate spring boot post example
Cómo autowire RestTemplate usando anotaciones (5)
Cuando intento autowire Spring RestTemplate, aparece el siguiente error:
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.
Usando Spring 4 en un entorno impulsado por anotaciones.
Mi servlet despachador está configurado de la siguiente manera:
<context:component-scan base-package="in.myproject" />
<mvc:default-servlet-handler />
<mvc:annotation-driven />
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
Mi clase en la que estoy intentando autowire RestTemplate es la siguiente:
@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);
}
}
Puede agregar el siguiente método a su clase para proporcionar una implementación predeterminada de RestTemplate:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Si está utilizando Spring Boot 1.4.0 o posterior como base de su impulsado por anotación, Spring no proporciona un único bean RestTemplate configurado automáticamente. De su documentación:
https://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/html/boot-features-restclient.html
Si necesita llamar a los servicios REST remotos desde su aplicación, puede usar la clase RestTemplate de Spring Framework. Dado que las instancias de RestTemplate a menudo necesitan personalizarse antes de ser utilizadas, Spring Boot no proporciona ningún bean RestTemplate configurado automáticamente. Sin embargo, sí configura automáticamente un RestTemplateBuilder que puede usarse para crear instancias de RestTemplate cuando sea necesario. El RestTemplateBuilder configurado automáticamente se asegurará de que HttpMessageConverters se aplique a las instancias de RestTemplate.
Errores que verás si un RestTemplate
no está definido
Considere la posibilidad de definir un bean de tipo ''org.springframework.web.client.RestTemplate'' en su configuración.
o
No se ha encontrado ningún bean calificado de tipo [org.springframework.web.client.RestTemplate]
Cómo definir un RestTemplate
través de anotaciones
Dependiendo de qué tecnologías está utilizando y qué versiones influirán en cómo definir una RestTemplate
en su clase @Configuration
.
Primavera> = 4 sin bota de primavera
Simplemente define un @Bean
:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Bota de primavera <= 1.3
No es necesario definir uno, Spring Boot define automáticamente uno para ti.
Bota de primavera> = 1.4
Spring Boot ya no define automáticamente un RestTemplate
sino que define un RestTemplateBuilder
que le permite tener más control sobre el RestTemplate
que se crea. Puede inyectar RestTemplateBuilder
como un argumento en su método @Bean
para crear un RestTemplate
:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
// Do any additional configuration here
return builder.build();
}
Usándolo en tu clase
@Autowired
private RestTemplate restTemplate;
o
@Inject
private RestTemplate restTemplate;
@Autowired
private RestOperations restTemplate;
Solo se pueden autorizar interfaces con implementaciones.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateClient {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}