Spring Boot OpenFeign PATCH 请求报错:java.net.ProtocolException: Invalid HTTP method: PATCH
Spring Boot OpenFeign About 2,604 words错误信息
java.net.ProtocolException: Invalid HTTP method: PATCH
at java.base/java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:489)
at java.base/sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(HttpURLConnection.java:598)
at feign.Client$Default.convertAndSend(Client.java:163)
at feign.Client$Default.execute(Client.java:103)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:119)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89)
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100)
at jdk.proxy2/jdk.proxy2.$Proxy136.routePatch(Unknown Source)
原因
OpenFeign
默认使用的是Java
提供的HttpURLConnection
,而HttpURLConnection
不支持PATCH
请求。
解决方法
方法一
添加feign-httpclient
依赖,使用HttpClient
代替HttpURLConnection
。
<dependency>
<!-- Required to use PATCH -->
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>${feign.version}</version>
</dependency>
注意:OpenFeign
的版本与feign-httpclient
的版本需查看发布时间,否则会抛出异常:
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
org.springframework.cloud.openfeign.annotation.QueryMapParameterProcessor.processArgument(QueryMapParameterProcessor.java:48)
The following method did not exist:
'feign.MethodMetadata feign.MethodMetadata.queryMapEncoded(boolean)'
The method's class, feign.MethodMetadata, is available from the following locations:
jar:file:/app/app.jar!/BOOT-INF/lib/feign-core-12.1.jar!/feign/MethodMetadata.class
The class hierarchy was loaded from the following locations:
feign.MethodMetadata: jar:file:/app/app.jar!/BOOT-INF/lib/feign-core-12.1.jar!/
Action:
Correct the classpath of your application so that it contains a single, compatible version of feign.MethodMetadata
方法二
仍然使用HttpURLConnection
,请求设置为POST
,但添加X-HTTP-Method-Override
请求头覆盖POST
请求。
HttpURLConnection conn = (HttpURLConnection) new URL("http://example.com").openConnection();
conn.setRequestProperty("X-HTTP-Method-Override", "PATCH");
conn.setRequestMethod("POST");
Maven 仓库
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign
https://mvnrepository.com/artifact/io.github.openfeign/feign-httpclient
相关 issue
https://github.com/spring-cloud/spring-cloud-openfeign/issues/366
Views: 2,567 · Posted: 2023-02-17
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...