복붙노트

[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. ==============================

    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. ==============================

    2.아래 메소드를 클래스에 추가하여 RestTemplate의 기본 구현을 제공 할 수 있습니다.

    아래 메소드를 클래스에 추가하여 RestTemplate의 기본 구현을 제공 할 수 있습니다.

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

    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. ==============================

    4.

    @Autowired
    private RestOperations restTemplate;
    

    구현으로 인터페이스를 autowire 할 수 있습니다.

  5. ==============================

    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();
        }
    }
    
  6. from https://stackoverflow.com/questions/28024942/how-to-autowire-resttemplate-using-annotations by cc-by-sa and MIT license