如何在不使用 Spring Boot 的情况下注入 Feign Client 并调用 REST 端点

How to inject Feign Client with out using Spring Boot and call a REST Endpoint

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

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

进程 B - 一个新的Spring基于引导的组件,托管 REST 端点。

现在从进程 A 中,在各种按钮上单击如何使用 Feign 客户端调用进程 B 上的 REST 端点。

注意 - 由于进程 A 基于 Spring XML,目前我们无法将其转换为 Spring 引导。因此@EnableFeignClients不能用于初始化Feign Clients

那么两个问题

1) 如果以上都可行怎么办?

2) 直到进程 A 移动到 Spring 引导 - Feign 是否仍然比 spring REST 模板更简单?

您可以在任何代码中初始化 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

Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSockets and you can easily use feign without spring boot. And Yes, feign still better option to use because Feign Simplify the HTTP API Clients using declarative way as 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 可用于简化您的任务。