0

私は現在、Spring と Feign の両方を把握しようとしています。要点をまっすぐに: 私はこのプロジェクトで @FeignClient を変更するのに苦労しています: Walery に よる Feign Hello World の代わりに

ウィキデータクライアント

@FeignClient(url = "https://www.wikidata.org/w")
// https://www.wikidata.org/w/api.php?action=wbsearchentities&search=apple&language=en&format=json
public interface WikidataClient {

    @RequestMapping(value = "/api.php?action=wbsearchentities&language=en&format=json", method = GET)
    WebsearchEntities searchForEntities(@RequestParam("search") final String search);
}

ここにあるものと同様の @Autowired 表記を使用します: Section called : Creation Feign Clients Manually

これの目的は、後でカスタム デコーダーとエンコーダーを挿入することです。私はしばらくそれを試してきましたが、私が達成できたのはすべてを台無しにすることだけでした。

あちこちからいくつかの手がかりを集め、構成クラスを作成するところまでたどり着きました。

FeignConfig

@Import(FeignClientsConfiguration.class)
public class FeignConfig {
    public WikidataClient fooclient;
    @Autowired
    public FeignConfig(Encoder encoder, Decoder decoder){
        this.fooclient = Feign.builder()
                .encoder(encoder)
                .decoder(decoder)
                .target(WikidataClient.class,"https://www.wikidata.org/w");
    }
}

修正済み

ウィキデータクライアント

わずかにインターフェース

//@FeignClient(url = "https://www.wikidata.org/w")
// https://www.wikidata.org/w/api.php?action=wbsearchentities&search=apple&language=en&format=json
public interface WikidataClient {

    @RequestMapping(value = "/api.php?action=wbsearchentities&language=en&format=json", method = GET)
    WebsearchEntities searchForEntities(@RequestParam("search") final String search);
}

代わりに前述のクラスを使用しようとしました

ウィキデータランナー

@Component
public class WikidataRunner implements CommandLineRunner {
    private final WikidataClient omdbClient;
    @Autowired
    public WikidataRunner(WikidataClient omdbClient){
        this.omdbClient = omdbClient;
        this.feignConfig = new FeignConfig(new Encoder.Default(), new Decoder.Default());
    }

    FeignConfig feignConfig;
    @Override
    public void run(final String... args) throws Exception {
        final WebsearchEntities apple = feignConfig.fooclient.searchForEntities("apple");
        System.out.println(apple);
    }
}

私が得たのは、さまざまな種類の Bean エラーだけでした

2017-07-19 08:02:29.056 ERROR 2018 --- スレッド「メイン」での例外 org.springframework.beans.factory.UnsatisfiedDependencyException: ファイル [/home/mibi/IdeaProjects/ FUFEign/feign-helloworld/target/classes/codes/walery/research/feign/wikidata/WikidataRunner.class]: タイプ [codes.walery.research.feign.wikidata.WikidataClient] のインデックス 0 を持つコンストラクター引数によって表現された満たされていない依存関係: : タイプ [codes.walery.research.feign.wikidata.WikidataClient] の適格な Bean が依存関係で見つかりませんでした: この依存関係のオートワイヤー候補として適格な Bean が少なくとも 1 つ必要です。依存関係の注釈: {}; ネストされた例外は org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualing bean of type [codes.walery.research.feign. wikidata.WikidataClient] 依存関係が見つかりました: この依存関係のオートワイヤー候補として適格な少なくとも 1 つの Bean が必要です。依存関係の注釈: {} [
この依存関係のオートワイヤー候補として適格な少なくとも 1 つの Bean が必要です。依存関係の注釈: {} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org. springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1326) ~[spring-beans-4.2.1.RELEASE.jar:4.2.1.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory $1.getObject(AbstractBeanFactory.java:305) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org. コード.walery.research.feign.FeignHelloworldApplication.main(FeignHelloworldApplication.java:12) で springframework.boot.SpringApplication.run(SpringApplication.java:969)ファイル [/home/mibi/IdeaProjects/FUFEign/feign-helloworld/target/classes/codes/walery/research/feign/wikidata/WikidataRunner.class] で定義された名前 'wikidataRunner': インデックス 0 のコンストラクター引数で表現された満たされていない依存関係タイプ [codes.walery.research.feign.wikidata.WikidataClient]: : タイプ [codes.walery.research.feign.wikidata.WikidataClient] の適格な Bean が依存関係で見つかりませんでした: このための autowire 候補として適格な少なくとも 1 つの Bean が期待されます依存。依存関係の注釈: {}; ネストされた例外は org. springframework.beans.factory.NoSuchBeanDefinitionException: タイプ [codes.walery.research.feign.wikidata.WikidataClient] の適格な Bean が依存関係で見つかりません: 少なくとも 1 つの原因が予想されます: org.springframework.beans.factory.NoSuchBeanDefinitionException: 適格な Bean がありませんタイプ [codes.walery.research.feign.wikidata.WikidataClient] の依存関係が見つかりました: この依存関係のオートワイヤー候補として適格な少なくとも 1 つの Bean が必要です。依存関係のアノテーション: {} org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1326) で、この依存関係のオートワイヤー候補としての資格があります。依存性アノテーション: org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory. FeignHelloworldApplication.main(FeignHelloworldApplication.java:12) [classes/:na] 2017-07-19 08:02:29.059 INFO 2018 --- [スレッド 1] scaAnnotationConfigApplicationContext : org.springframework.context.annotation.AnnotationConfigApplicationContext@3d8314f0 を閉じる: 起動日 [Wed Jul 19 08:02:24 CEST 2017]; コンテキスト階層のルート

プロセスは終了コード 1 で終了しました

Spring と Feign の初心者であることを否定しません。事は、私はこれらの両方を必死に理解する必要があるということです. これまでのところ、Feign について調査するのに 10 時間以上費やしましたが、役に立ちませんでした。

助けと指導をお願いします

ブラケットがありません

4

1 に答える 1