[SPRING] 어노테이션을 사용하여 RestTemplate을 자동 작성하는 방법
SPRING어노테이션을 사용하여 RestTemplate을 자동 작성하는 방법
Spring RestTemplate을 autowire하려고하면 다음 오류가 발생합니다.
중첩 예외는 org.springframework.beans.factory.NoSuchBeanDefinitionException : [org.springframework.web.client.RestTemplate] 유형의 적격 bean이 종속성에 대해 발견되지 않았습니다.이 종속성에 대한 autowire 후보로 적합한 적어도 하나의 bean이 필요합니다.
주석 중심 환경에서 Spring 4 사용하기.
디스패처 서블릿은 다음과 같이 구성됩니다.
<context:component-scan base-package="in.myproject" />
<mvc:default-servlet-handler />
<mvc:annotation-driven />
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
RestTemplate을 autowire하려고하는 클래스는 다음과 같습니다.
@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이 정의되지 않은 경우 표시되는 오류
RestTemplate이 정의되지 않은 경우 표시되는 오류
또는
어노테이션을 통해 RestTemplate을 정의하는 방법
사용중인 기술과 @Configuration 클래스에서 RestTemplate을 정의하는 방법에 영향을주는 버전에 따라 다릅니다.
스프링 부트가없는 스프링> = 4
@Bean을 정의하기 만하면됩니다.
@Bean public RestTemplate restTemplate() { return new RestTemplate(); }
봄 부팅 <= 1.3
하나를 정의 할 필요가 없으므로 Spring Boot는 자동으로 하나를 정의합니다.
스프링 부트> = 1.4
Spring Boot는 더 이상 RestTemplate을 자동으로 정의하지 않지만 RestTemplateBuilder를 정의하여 생성 된 RestTemplate을보다 잘 제어 할 수 있도록합니다. RestTemplate을 만들기 위해 RestBemplateBuilder를 @Bean 메서드의 인수로 삽입 할 수 있습니다.
@Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { // Do any additional configuration here return builder.build(); }
수업에서 사용하기
@Autowired private RestTemplate restTemplate;
또는
@Inject private RestTemplate restTemplate;
-
==============================
2.아래 메소드를 클래스에 추가하여 RestTemplate의 기본 구현을 제공 할 수 있습니다.
아래 메소드를 클래스에 추가하여 RestTemplate의 기본 구현을 제공 할 수 있습니다.
@Bean public RestTemplate restTemplate() { return new RestTemplate(); }
-
==============================
3.Spring Boot 1.4.0 또는 이후 버전을 주석 중심으로 사용한다면, Spring은 하나의 자동 설정 RestTemplate 빈을 제공하지 않는다. 그들의 문서에서 :
Spring Boot 1.4.0 또는 이후 버전을 주석 중심으로 사용한다면, Spring은 하나의 자동 설정 RestTemplate 빈을 제공하지 않는다. 그들의 문서에서 :
https://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/html/boot-features-restclient.html
-
==============================
4.
@Autowired private RestOperations restTemplate;
구현으로 인터페이스를 autowire 할 수 있습니다.
-
==============================
5.
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(); } }
from https://stackoverflow.com/questions/28024942/how-to-autowire-resttemplate-using-annotations by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring - 프로그래밍 방식으로 콩 세트 생성 (0) | 2019.01.10 |
---|---|
[SPRING] 스프링 데이터 REST로 중첩 된 엔티티를 POST하는 방법 (0) | 2019.01.10 |
[SPRING] 스프링 3에서 자동 삽입 된 키 얻기 / PostgreSQL 8.4.9 (0) | 2019.01.10 |
[SPRING] Sun JSTL taglib 선언이 "태그 라이브러리 설명자를 찾을 수 없습니다"와 함께 실패합니다 [duplicate] (0) | 2019.01.10 |
[SPRING] <mvc : default-servlet-handler />의 필요성과 사용법은 무엇입니까? (0) | 2019.01.10 |