【SpringCloud】Feign解决Get请求自动转化成POST的问题

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
  • 加入这两个依赖
        
            org.apache.httpcomponents
            httpclient
            4.5.9
        
        
            io.github.openfeign
            feign-httpclient
            10.2.3
        

搞定!

你可能感兴趣的:(【SpringCloud】Feign解决Get请求自动转化成POST的问题)