1. 程式人生 > >Feign支援Patch方法

Feign支援Patch方法

原文:

問題描述

FeignClient 中聲明瞭這麼一個方法

1
2
@RequestMapping(method = RequestMethod.PATCH, value = "/agents/{id}", consumes = "application/json")
 void update(@PathVariable("id")String id, @RequestBody Map<String,Object> info);

其它得方法呼叫都能成功,就是這個方法呼叫得時候報異常:

1
2
com.netflix.hystrix.exception.HystrixRuntimeException: update timed-out and no fallback available.
...

解決過程

這個異常是 hystrix(斷路器)丟擲的,只能看出來呼叫超時。為了排除干擾,我先暫時禁用Feign的斷路器:在配置檔案加feign.hystrix.enabled: false,然後再次呼叫試試: 這次異常資訊能看出來了,看來失敗資訊確實是被hystrix給吃了。。。

1
2
3
4
5
feign.RetryableException: Invalid HTTP method: PATCH executing PATCH http://agent-info/agents/0123456748
...
Caused by: java.net.ProtocolException: Invalid HTTP method: PATCH
  at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:440)
...

看來這個問題是因為java.net.HttpURLConnection.setRequestMethod 不支援PATCH方法,無法將請求傳送出去。 HttpClient 應該支援PATCH方法。 谷歌一下關鍵詞 spring feign httpclient patch 找到 答案

解決方式

netflix 有feign的httpclient支援。maven加入下面的依賴就搞定了。

1
2
3
4
<dependency>
   <groupId>com.netflix.feign</groupId>
   <artifactId>feign-httpclient</artifactId>
</dependency>