https://blog.csdn.net/menggudaoke/article/details/77884674
近期项目中需要通过Spring-Cloud调用其他project的REST接口,不管是delete、put、post或get,都可以调试成功,但是到patch方式发送请求就无法访问:
如果开启了熔断器,需要去掉调用,因为,熔断器会把你的真正的异常给覆盖掉,不管你什么异常,熔断器一般会给你提示请求超时之类的异常。
超时异常如:
com.netflix.hystrix.exception.HystrixRuntimeException: update timed-out and no fallback available.
去掉熔断器之后的真正的异常为:
|
feign.RetryableException: Invalid HTTP <span class="hljs-function"><span class="hljs-keyword">method</span>:</span> PATCH executing PATCH http:<span class="hljs-comment">//agent-info/agents/0123456748</span> ... Caused <span class="hljs-keyword">by</span>: java.net.ProtocolException: Invalid HTTP <span class="hljs-function"><span class="hljs-keyword">method</span>:</span> PATCH at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:<span class="hljs-number">440</span>) |
…
这个问题是因为java.net.HttpURLConnection.setRequestMethod 不支持PATCH方法,无法将请求发送出去。
解决办法:HttpClient 支持PATCH方法,加入HttpClient依赖即可解决。注:如果添加了依赖还不成功,去你的maven库中看看依赖的jar包有没有下载下来,我第一次用了Netflix的包,就没下载成功。
添加下面的依赖:
|
<dependency> <!-- Required to use PATCH --> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> <version>${feign.version}</version> </dependency |