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

简介: Feign调用把GET请求自动转成POST请求解决:Request method 'POST' not supported

问题场景:


调用类型:Feign调用


请求类型:GET请求


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


解决方案:添加maven


<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId></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:删除方法时使用!

目录
相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
10239 1
|
Java 微服务 Spring
FeignClient GET请求方式无法解析对象参数
FeignClient GET请求方式无法解析对象参数,报java.lang.IllegalArgumentException: method GET must not have a request body
1656 0
|
8月前
|
JSON Java 数据格式
Feign 复杂对象参数传递避坑指南:从报错到优雅落地
本文深入剖析了SpringCloud Feign在复杂对象参数传递中的常见问题及解决方案。文章首先分析了GET请求传递复杂对象失败的底层原因,包括HTTP规范约束和Feign参数解析逻辑。针对GET场景,提供了四种解决方案:@SpringQueryMap(首选)、手动拆分属性+@RequestParam、MultiValueMap封装和自定义FeignEncoder,详细比较了各方案的优缺点和适用场景。对于POST场景,推荐使用@RequestBody注解传递JSON请求体。
1216 6
|
Java Apache 网络架构
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(上)
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)
|
存储 SQL 监控
【EMQX】EMQX管理控制台即EMQX Dashboard简介
【EMQX】EMQX管理控制台即EMQX Dashboard简介
1792 0
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
37114 1
|
缓存 Java
java: 警告: 源发行版 17 需要目标发行版 17,java17 无效的目标发行
java: 警告: 源发行版 17 需要目标发行版 17,java17 无效的目标发行
15033 60
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
1952 1