Feign支持Patch方法

原文:

http://sylarlove.coding.me/2016/04/21/%E8%AE%A9Feign%E6%94%AF%E6%8C%81PATCH%E6%96%B9%E6%B3%95/

问题描述

FeignClient 中声明了这么一个方法

1
2
@RequestMapping(method = RequestMethod.PATCH, value = "/agents/{id}", consumes = "application/json")
 void update(@PathVariable("id")String id, @RequestBody Map 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

   com.netflix.feign
   feign-httpclient

你可能感兴趣的:(Feign支持Patch方法)