Feign
/**
* @author mirror
*/
@FeignClient(
value = "pocket-account-management",
configuration = FeignAccMgrServiceConfiguration.class)
public interface AccMgrService {
...
@GetMapping(ACC_URL_PREFIX + "/query/currencys")
ResultData queryCurrencysByIdx(@RequestBody QueryIdx queryIdx);
...
}
服务提供者
@GetMapping("/query/currencys")
public ResultData queryCurrencysByIdx(@RequestBody QueryIdx queryIdx) {
...
return ...;
}
调用时出现错误:Caused by: feign.FeignException$MethodNotAllowed: status 405 reading
明明Feign发送的是Get请求,到了提供者这边却变成了Post
原因
因为Feign默认使用的连接工具实现类,所以里面发现只要你有body体对象,就会强制的把GET请求转换成POST请求。
解决办法
- 如何使用Feign构造多参数的请求
- 更换Apache的HttpClient。
步骤
- 加入Feign的配置项
feign:
httpclient:
enabled: true
- 加入这两个依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.2.3</version>
</dependency>
搞定!