Feign呼び出しサービスエラー:No qualifying bean of type`HttpMessage Coverters`
記事の目次 Feignコールサービスエラー 問題 エラーコード ソリューション 原因 HTTPプロトコルが規範化されていない場合、Decoder を配置する必要がある。構成コード Feignコールサービスエラー
問題
今日はGatewayゲートウェイでFeign遠隔通話サービスの利用を試みた時、エラーが発生しました。記録してください。
エラーコード
原因
いくつかの記事を調べてみましたが、Gatewayがhttpプロトコルを使っていると思います。Feignもそうですが、Feignのデコーダが配置されていません。復号に問題があります。今はまだよく分かりません。まず記録して、後で勉強したら完璧です。
Feignは、方法署名における方法パラメータオブジェクトを、HTTP要求に要求パラメータとしてプログレッシブ化するプロセスを、エンコーダによって実行する。同じように、HTTP応答データをjavaオブジェクトに逆プログレッシブ化することは、デコーダ(Decoder)によって行われる。
HTTPプロトコルが規範化されていない場合、Decoderを配置する必要があります。
コードの設定
問題
今日はGatewayゲートウェイでFeign遠隔通話サービスの利用を試みた時、エラーが発生しました。記録してください。
エラーコード
feign.codec.DecodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:182) ~[feign-core-10.4.0.jar:na]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ org.springframework.web.cors.reactive.CorsWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ HTTP GET "/addCart/14" [ExceptionHandlingWebHandler]
ソリューション原因
いくつかの記事を調べてみましたが、Gatewayがhttpプロトコルを使っていると思います。Feignもそうですが、Feignのデコーダが配置されていません。復号に問題があります。今はまだよく分かりません。まず記録して、後で勉強したら完璧です。
Feignは、方法署名における方法パラメータオブジェクトを、HTTP要求に要求パラメータとしてプログレッシブ化するプロセスを、エンコーダによって実行する。同じように、HTTP応答データをjavaオブジェクトに逆プログレッシブ化することは、デコーダ(Decoder)によって行われる。
HTTPプロトコルが規範化されていない場合、Decoderを配置する必要があります。
コードの設定
@SpringBootConfiguration
public class FeignConfig {
@Bean
public Decoder feignDecoder() {
return new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter()));
}
public ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() {
final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(new GateWayMappingJackson2HttpMessageConverter());
return new ObjectFactory<HttpMessageConverters>() {
@Override
public HttpMessageConverters getObject() throws BeansException {
return httpMessageConverters;
}
};
}
public class GateWayMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
GateWayMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.valueOf(MediaType.TEXT_HTML_VALUE + ";charset=UTF-8"));
setSupportedMediaTypes(mediaTypes);
}
}
}
参照ドキュメント:リンク:Decoderリンクについて:設定コードについて