Feign调用把GET请求自动转成POST请求解决:Request method ‘POST’ not supported

问题场景:

调用类型:Feign调用

请求类型:GET请求

请求参数:body(规范:POST:body)

解决方案:添加maven

  1. <dependency>
  2. <groupId>io.github.openfeign</groupId>
  3. <artifactId>feign-httpclient</artifactId>
  4. </dependency>

原理简述:

Feign原生的连接工具使用了jdk中的rt.jar包的HttpURLConnection 类 进行实现,

其中,对应HttpURLConnection 的连接对象,Feign默认的实现是设置了doOutput为true

connection.setDoOutput(true);

这个设置也正是解释了为什么Feign只要发现你存在body体对象就会将Get请求转成Post

感兴趣的可以查看更详细的原理分析:https://www.freesion.com/article/9609777518/

总结:

Feign使用的原生的连接工具,就是发现你的传递参数是body时,就会将Get请求转成Post。所以解决方案:用feign-httpclient替换掉原生的连接工具。

注:当我们使用:GET、POST、PUT、DELETE请求类型时,还是要注意规范,不然会出现你意想不到的错误!

规范参考:GET:少量参数查询、路径上直接拼接参数,POST:查询参数较多,PUT:修改方法时使用,DELETE:删除方法时使用!