1、这个问题我也找了很久, 也从网上搜寻了很多方法, 会在最后列出对应的地址
2、可能版本不同, 触发该问题的机制也会不一样, 因为我的解决方法和网上罗列的不是完全一样
3、我的版本:
**
Spring Cloud: Hoxton.SR3
spring-cloud-openfeign: 2.2.2.RELEASE
**
最近在整理feign的各种调用方式, 本来准备先写调用方式这篇文章的, 结果发现了这个问题, 给先记录下来
/**
* GET 请求多参, 携带头部
*
* @param data
* @param headerMap
* @return
*/
@RequestLine("GET /testHeard/getHeard")
CommonResult getHeard(@SpringQueryMap TestEntity data, @HeaderMap Map<String, Object> headerMap);
进行服务调用的时候, 返回了一个错误, 请求方法错误, 不支持POST. 因为我服务提供者是一个GET请求.
Feign的日志是先打印的, 然后在做请求操作
至于为什么会强制转换, 这个大家可以自行研究一下, 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注解时, 这里就是正常的了, 也算是一种解决方案
我使用的这个版本, 只需要这一步即可. 替换feign的httpclient
<!-- 使用Apache HttpClient替换Feign原生httpclient -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.1.0</version>
</dependency>
网上看到有的说需要配置连接方式, 在我这个版本可以不用做操作, 默认就是true
文档地址:https://docs.spring.io/spring-cloud-openfeign/docs/2.2.x-SNAPSHOT/reference/html/appendix.html
# 我使用的这个版本这一步可以忽略
httpclient:
enabled: true
当我们引入feign-httpclient后:(feign-httpclient用的是ApacheHttpClient)
同时他也实现了feign的Client
继续断点:
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)