對於代碼,請參閱我的小4類github project春季雲Netflix和HystrixObservable - > JsonMappingException
我使用Spring FeignClients連接到REST服務。這是假死客戶端的樣子在其基本(非異步)形式:
@FeignClient(value="localhost:8080/products", decode404 = true)
public interface ProductClient {
@RequestMapping(value="/{id}")
Product getById(@PathVariable("id") String id);
}
現在我想異步做,用觀察到的。關於這方面的信息在Spring文檔中嚴重缺乏,只有一個small paragraph告訴你使用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會自動將解碼器附加到FeignClient中,以使用Jackson反序列化響應。反序列化的類型來自返回值。
我可以嘗試配置一個custome解碼器或手動構建Feign客戶端,但這樣做會挫敗Spring Boot的全部用途:它自動工作(儘管在這裏和那裏有一點配置)。
所以我的問題是:這應該如何工作?
作爲[文檔]中示出(https://github.com/OpenFeign/feign/tree/master/hystrix),則需要構造不同的客戶端(通過'HystrixFeign')。 –
是的,可以手動構建Feign客戶端。但我的問題是關於Spring + Feign。那麼如何讓Spring產生合適的Feign客戶端呢?春季文檔表明它可以,但一些重要的細節被忽略。另外這個[博客文章](https://www.voxxed.com/blog/2016/03/netflix-stack-using-spring-boot-part-3-feign/#feignclientwithhystrixobservablewrapper)正是我所做的。 –