如何在不使用 Spring Boot 的情况下注入 Feign Client 并调用 REST Endpoint
Posted
技术标签:
【中文标题】如何在不使用 Spring Boot 的情况下注入 Feign Client 并调用 REST Endpoint【英文标题】:How to inject Feign Client with out using Spring Boot and call a 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 模板更容易选择吗?
【问题讨论】:
【参考方案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 如果它对您有用,可以接受答案,这将帮助其他人找到相关问题的解决方案。以上是关于如何在不使用 Spring Boot 的情况下注入 Feign Client 并调用 REST Endpoint的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口
如何在不从 spring-boot-starter-web 继承的情况下在 Spring Boot 中获取 ObjectMapper 实例?
如何在不依赖 MongoDB 的情况下启动 spring-boot 应用程序?
如何在不维护 jsessionid 的情况下在 Spring Boot 中保护 RESTful API