headers getforobject example consume java spring spring-mvc resttemplate

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