web-dev-qa-db-ja.com

注釈を使用してRestTemplateを自動配線する方法

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の使用。

私のディスパッチャサーブレットは次のように構成されています。

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


    }
}
44
meeti sharma

_RestTemplateが定義されていない場合に表示されるエラー

構成で「org.springframework.web.client.RestTemplate」タイプのBeanを定義することを検討してください。

または

タイプ[org.springframework.web.client.RestTemplate]の修飾Beanが見つかりません

アノテーションを介してRestTemplateを定義する方法

使用しているテクノロジーと、@ConfigurationクラスでRestTemplateを定義する方法に影響するバージョンに応じて異なります。

Spring> = 4 Spring Bootなし

@Beanを定義するだけです:

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

Spring Boot <= 1.3

定義する必要はありません。SpringBootは自動的に定義します。

Spring Boot> = 1.4

Spring BootはRestTemplateを自動的に定義しなくなりましたが、代わりにRestTemplateBuilderを定義して、作成されるRestTemplateをより詳細に制御できるようにします。 @Beanメソッドの引数としてRestTemplateBuilderを挿入して、RestTemplateを作成できます。

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

クラスで使用する

@Autowired
private RestTemplate restTemplate;

または

@Inject
private RestTemplate restTemplate;
85
dustin.schultz

RestTemplateのデフォルト実装を提供するために、クラスに以下のメソッドを追加できます。

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

Spring Boot 1.4.0以降を注釈駆動型のベースとして使用している場合、Springは自動設定された単一のRestTemplate Beanを提供しません。ドキュメントから:

https://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/html/boot-features-restclient.html

アプリケーションからリモートRESTサービスを呼び出す必要がある場合は、Spring FrameworkのRestTemplateクラスを使用できます。 RestTemplateインスタンスは使用する前にカスタマイズする必要があることが多いため、Spring Bootは自動設定された単一のRestTemplate Beanを提供しません。ただし、必要なときにRestTemplateインスタンスを作成するために使用できるRestTemplateBuilderを自動構成します。自動構成のRestTemplateBuilderは、適切なHttpMessageConvertersがRestTemplateインスタンスに確実に適用されるようにします。

11
Brice McIver
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
Kumar
@Autowired
private RestOperations restTemplate;

インターフェイスを実装にのみ自動配線できます。

2
riship89