Spring cloud feign does not support @ RequestBody + RequestMethod. GET error solution. feign @ requestbody
1. Problem sorting:
Exception:Org. springframework. web. HttpRequestMethodNotSupportedException: Request method 'post' not supported
Obviously, this method is regarded as POST when feign executes the http request, but RequestMethod. GET or @ GetMapping is defined in feign client. An error is reported due to a conflict.
So why does feign think this method is post?
Source code tracking:
1. We can see from the feignClient annotation as the entry:
2. According to the consistent style of spring cloud, we open the FeignAutoConfiguration class to view the configuration logic:
Look at the note in the red box: this class is triggered only when ILoadBalancer does not exist. Ribbon is enabled for our project, so it must exist. Let's look at the note again: to load the Server Load balancer ribbon clients, you must configure the FeignRibbonClientAutoConfiguration class. Go ~
For example, see the red box comment: According to the import order from top to bottom: HttpClientFeignLoadBalancedConfiguration> OkHttpFeignLoadBalancedConfiguration> DefaultFeignLoadBalancedConfiguration, corresponding to the underlying http tool:Httpclient> okhttp> HttpURLConnection
According to the http Protocol definition, @ RequestBody + RequestMethod is supported. GET, the specific implementation of the toolkit is different. Check the source code and find that okhttp and HttpURLConnection are not supported (an error is reported), and only httpclient is supported. (An error will be reported when HttpURLConnection is used by default)
We know that only httpclient supports @ RequestBody + RequestMethod. GET, so we must meet the conditions by using HttpClientFeignLoadBalancedConfiguration. Let's look at the source code:
It can be seen that the ApacheHttpClient class exists under the class path. We will add the following in pom:
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency>
Finally loaded the feign-httpclient-9.5.0.jar package, open to see inside an ApacheHttpClient. class, click to see is actually a httpclient.
SoIntroduce feign-httpclient -- in pom, And there is ApacheHttpClient. class -- in the class path. Go to HttpClientFeignLoadBalancedConfiguration -- when requesting HttpClient -- Support @ RequestBody + RequestMethod. GET
2. solution:
Introduce in pom
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency>
After maven updates, check whether the feign-httpclient-9.5.0.jar package exists in the project.
Summary
The above is a small series of spring cloud feign does not support @ RequestBody + RequestMethod. the solution to GET errors is helpful to everyone. If you have any questions, please leave a message and I will reply to you in a timely manner. Thank you very much for your support for the help House website!