Feign异常--Request method ‘POST‘ not supported

超、凢脫俗 2023-01-14 11:56 352阅读 0赞

文章目录

  • 1、前置
  • 2、出现该问题的方式
  • 3、出现的问题
  • 4、通过源码进行分析
  • 5、解决方法
  • 6、说明, 个人理解, 欢迎指正
  • 7、完结

1、前置

1、这个问题我也找了很久, 也从网上搜寻了很多方法, 会在最后列出对应的地址
2、可能版本不同, 触发该问题的机制也会不一样, 因为我的解决方法和网上罗列的不是完全一样
3、我的版本:
**
Spring Cloud: Hoxton.SR3
spring-cloud-openfeign: 2.2.2.RELEASE
**

2、出现该问题的方式

最近在整理feign的各种调用方式, 本来准备先写调用方式这篇文章的, 结果发现了这个问题, 给先记录下来

  1. /**
  2. * GET 请求多参, 携带头部
  3. *
  4. * @param data
  5. * @param headerMap
  6. * @return
  7. */
  8. @RequestLine("GET /testHeard/getHeard")
  9. CommonResult getHeard(@SpringQueryMap TestEntity data, @HeaderMap Map<String, Object> headerMap);

3、出现的问题

进行服务调用的时候, 返回了一个错误, 请求方法错误, 不支持POST. 因为我服务提供者是一个GET请求.
Feign的日志是先打印的, 然后在做请求操作
在这里插入图片描述

4、通过源码进行分析

在这里插入图片描述
至于为什么会强制转换, 这个大家可以自行研究一下, HttpURLConnection设置get请求无效.

我找寻了一下JDK8的文档, 并没有描述说会出现这种情况:https://docs.oracle.com/javase/8/docs/api/
但是Android的文档里面却对此进行了描述:
https://developer.android.com/reference/java/net/HttpURLConnection.html
在这里插入图片描述
然后就是get请求request.body() != null为何成立, 这个就没有细看了, 感觉弄不太明白, 就不写了
-————————————-分割线-——————————————-
当我不使用@RequestLine注解时, 这里就是正常的了, 也算是一种解决方案
在这里插入图片描述

5、解决方法

我使用的这个版本, 只需要这一步即可. 替换feign的httpclient

  1. <!-- 使用Apache HttpClient替换Feign原生httpclient -->
  2. <dependency>
  3. <groupId>io.github.openfeign</groupId>
  4. <artifactId>feign-httpclient</artifactId>
  5. <version>10.1.0</version>
  6. </dependency>

网上看到有的说需要配置连接方式, 在我这个版本可以不用做操作, 默认就是true
文档地址:https://docs.spring.io/spring-cloud-openfeign/docs/2.2.x-SNAPSHOT/reference/html/appendix.html
在这里插入图片描述

  1. # 我使用的这个版本这一步可以忽略
  2. httpclient:
  3. enabled: true

6、说明, 个人理解, 欢迎指正

当我们引入feign-httpclient后:(feign-httpclient用的是ApacheHttpClient)
同时他也实现了feign的Client
在这里插入图片描述
在这里插入图片描述
继续断点:
在这里插入图片描述

7、完结

1、从官网寻找自己的版本: https://docs.spring.io/spring-cloud-openfeign/docs/, 优先从官方查询是否有对应的解决方法

2、我使用的版本文档地址: 文档地址:https://docs.spring.io/spring-cloud-openfeign/docs/2.2.x-SNAPSHOT/reference/html/appendix.html

3、openfeign对应的其余文章:

代码地址以及对应的postman文件
Feign的使用示列–呕心沥血之作(1)
Feign的@FeignClient详解–呕心沥血之作(2)
Feign的默认契约注解详解–呕心沥血之作(3)
Feign异常–Request method ‘POST‘ not supported
Feign异常–A bean with that name | HTTP method type (ex. GET, POST)

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读