当前位置: 首页 > 知识库问答 >
问题:

将自定义伪装客户端注入Spring Application

雍马鲁
2023-03-14

我目前正在努力掌握Spring和Fign。开门见山:我正在努力修改这个项目中的“飞度客户端”: Walery的“飞度你好世界”,以便代替

维基百科

@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表示法,类似于此处的一个表示法:部分名为:手动创建外部客户端

这样做的目的是稍后注入自定义解码器和编码器。我已经尝试了一段时间,我所能实现的就是破坏整个事情。

我从这里和那里收集了一些线索,并设法到达了创建Configuration类的位置:

假装配置

@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错误

进程已完成,退出代码为1

我不会否认自己是Spring的新手,也不会装腔作势。问题是我需要拼命理解这两个。到目前为止,我已经花了10个小时研究了“伪装”,但都没有用。

真诚地寻求帮助和指导

缺失支架

共有1个答案

姜羽
2023-03-14

org.springframework.beans.factory.NoSuchBeanDefitionException:没有找到符合依赖项类型[codes.walery.research.feign.wikidata.WichiataClient]的Bean:预计至少有1个Bean符合此依赖项的自动装配候选项的条件。

尝试在某处声明一个bean:

    @Bean
    public WikiDataClient wikiDataClient () {

    }

使用feign builder手动构建feign客户端:

Feign.builder().client(client).encoder(encoder).decoder(decoder).contract(contract).target(WikiDataClient.class, "http://serviceId")
 类似资料:
  • 我试图为Spring Cloud OpenFeign提供CloseableHttpClient。Spring Cloud Open Faign Documentation表示它支持CloeableHttpClient。Spring文档没有给出任何实际替换HTTP客户端的例子。 基本上,我将SSLContext提供给HTTP客户端,我想假装使用这个SSLContext加载的客户端。如何将这个Clos

  • 问题内容: 我正在与socket.io聊天应用程序,我想用我的自定义客户端ID,而不是默认的(,)。连接时是否有任何发送自定义标识符的方式,或仅使用某种方式来跟踪每个ID的自定义名称?谢谢! 问题答案: 您可以在服务器上创建一个数组,并在其上存储自定义对象。例如,您可以存储Socket.io创建的ID和每个客户端发送到服务器的自定义ID: 在此示例中,您需要从每个客户端调用 storeClient

  • 我有我的Jhipster配置/应用程序属性。java类设置和工作,但不清楚如何将属性值注入url的假客户端注释: 使用@Value在下面不起作用: 有什么想法吗?

  • 我正在尝试为一个使用SSL的外部HTTP API创建一个假客户端。困难在于——如何用我的逻辑修改默认的Spring佯装客户端,在本例中是SSL连接工厂。所以基本上我想保留Spring自动为假客户机做的所有好事情,比如Hystrix、Sleuth跟踪等,并使其与我的SSL工厂一起工作。 如有任何建议,将不胜感激。 以下是我试图做的: 我尝试在ComponentScan之外提供自定义@配置: 通过注解

  • 我需要使用 restlet 客户端放置以下 rest 请求: 我可以在一个单独的调用中获取XToken,但是在当前的调用中,我无法在我的ClientResource对象中设置“Authorization”头。 有人可以建议我需要为我拥有的以下代码行添加哪些代码: 在restlet中创建和添加“Authorization”标头会导致restlet客户端库中出现错误。 提前谢谢 阿希什·夏尔马

  • 我在Cloud Foundry环境中将Spring CloudNetflixRibbon与Eureka结合使用。 我尝试实现的用例如下: > 我有一个名为的正在运行的CF应用程序,其中包含多个实例。 实例正在通过服务名称注册到Eureka 我使用eureka向服务实例添加了自定义元数据。例子元数据映射。应用程序id:${vcap.application.application\u id} 我想使用