有关代码,请参阅我的微型 4 类github 项目
我正在使用 Spring FeignClients 连接到休息服务。这是 Feign 客户端在其基本(非异步)形式中的样子:
@FeignClient(value="localhost:8080/products", decode404 = true)
public interface ProductClient {
@RequestMapping(value="/{id}")
Product getById(@PathVariable("id") String id);
}
现在我想使用 Observable 异步执行此操作。Spring 文档中严重缺乏这方面的信息,只有一小段内容告诉您使用 HystrixCommand。就是这样,没有解释,没有示例代码。
在另一篇博文中,有人告诉我改用 HystrixObservable。所以我尝试了:
@FeignClient(value="localhost:8080/products", decode404 = true)
public interface ProductClient {
@RequestMapping(value="/{id}")
HystrixObservable<Product> getById(@PathVariable("id") String id);
}
无论哪种方式,使用 HystrixCommand 或 HystrixObservable,它都会向我抛出错误: com.fasterxml.jackson.databind.JsonMappingException:无法构造 com.netflix.hystrix.HystrixObservable 的实例
我理解为什么会出现这个错误,因为 Spring Boot 会自动将 Decoder 附加到 FeignClient 以使用 Jackson 反序列化响应。并且将响应反序列化为的类型是从返回值派生的。
我可以尝试配置自定义解码器或手动构建 Feign 客户端,但这违背了 Spring Boot 的全部目的:它自动工作(尽管在这里和那里有一些配置)。
所以我的问题是:这应该如何工作?