Feign 的问题记录

发布时间 2023-03-24 14:52:34作者: 庄子游世

@PathVariable 问题

在Feign中使用@PathVariable注解的时候,一定要添加value值,即 @PathVariable(value="value_name"),否则依赖者方启动项目会出现 Feign PathVariable annotation was empty on param 0 报错信息。
对比:


// 正确写法:
@RequestMapping(value = "/ruprocdef/getInitiator/{procInstId}", method = RequestMethod.GET)
public Response getStartUsers(@PathVariable("procInstId") String procInstId);

// 错误写法
@RequestMapping(value = "/ruprocdef/getInitiator/{procInstId}", method = RequestMethod.GET)
public Response getStartUsers(@PathVariable String procInstId);

Get请求自动变Post请求

在使用Feign的过程中,如果我们的请求是Get请求,但是传递的是对象参数,这里的对象指的是复杂对象,我们自定义的,而不是Sting,Integer,那么这些参数会放在RequestBody里面,那在Feign调用的时候发现body里面有参数,就会将Get请求转变为Post请求。源码分析看这: 服务化踩过的坑,这个里面给出的是将Get请求变为Post请求的这种方式解决的;这里说一下另外一个解决方式:
首先需要在Feign的参数上添加@RequestBody 注解,这一步非常重要
添加配置:feign.httpclient.enabled=true
添加pom依赖

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

就可以,如果没有第一步,只有2和3,那么出现的问题就是传过去的参数全部变成了null。

后续遇到问题继续补充!!!