【问题标题】:How to inject Feign Client with out using Spring Boot and call a REST Endpoint如何在不使用 Spring Boot 的情况下注入 Feign Client 并调用 REST Endpoint
【发布时间】:2019-11-08 09:45:05
【问题描述】:

我有两个 Java 进程——它们使用不同的运行配置从同一个 Jar 中生成

流程 A - 客户端 UI 组件,使用基于 Spring bean xml 的方法开发。没有 Spring Boot。

流程 B - 基于 Springboot 的新组件,托管 REST 端点。

现在从 Process A ,在各种按钮上单击如何使用 Feign Client 在 Process B 上调用 REST 端点。

注意 - 由于 Process A 是基于 Spring XML 的,目前我们无法将其转换为 Spring boot。因此,@EnableFeignClients 不能用于初始化 Feign 客户端

两个问题

1) 如果以上是可能的怎么办?

2) 直到进程 A 移至 Spring boot - Feign 仍然比 spring REST 模板更容易选择吗?

【问题讨论】:

    标签: spring spring-boot spring-cloud spring-cloud-feign feign


    【解决方案1】:

    您可以在任何代码中初始化 Feign(没有 spring),就像在自述文件示例中一样:

    public static void main(String... args) {
        GitHub github = Feign.builder()
                         .decoder(new GsonDecoder())
                         .target(GitHub.class, "https://api.github.com");
    ...
    }
    

    请查看入门指南:feign on github

    【讨论】:

      【解决方案2】:

      Feign 是受 Retrofit、JAXRS-2.0 和 WebSockets 启发的 Java 到 HTTP 客户端绑定器,您可以在没有 spring boot 的情况下轻松使用 feign。是的,使用 feign 仍然是更好的选择,因为 Feign 使用声明性方式简化 HTTP API 客户端,就像 Spring REST 所做的那样。

      1) 在接口中定义http方法和端点。

      @Headers({"Content-Type: application/json"})
      public interface NotificationClient {
      
          @RequestLine("POST")
          String notify(URI uri, @HeaderMap Map<String, Object> headers, NotificationBody body);
      }
      

      2) 使用Feign.builder()方法创建Feign客户端。

      Feign.builder()
                      .encoder(new JacksonEncoder())
                      .decoder(customDecoder())
                      .target(Target.EmptyTarget.create(NotificationClient.class));
      

      feign 中有多种decoders 可用于简化您的任务。

      【讨论】:

      • @AnirbanBanerjee 如果它对您有用,可以接受答案,这将帮助其他人找到相关问题的解决方案。
      猜你喜欢
      • 2016-09-20
      • 2019-10-22
      • 2015-06-07
      • 2015-02-21
      • 2013-02-03
      • 2017-09-29
      • 2017-05-16
      • 2019-03-20
      • 2020-12-23
      相关资源
      最近更新 更多