springcloud使用feign时get对象传参为空值的解决方法

已有 219人阅读此文 - - JAVA

一、新建一个feign消费者的项目,已有就不用建了,这里步骤就不说了

第一步在消费者的pom.xml里加入以下两个依赖

<!--get对象传参数加入这两个依赖项 开始-->
<dependency>
    <groupId>com.netflix.feign</groupId>
    <artifactId>feign-httpclient</artifactId>
    <version>8.18.0</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>
<!--get对象传参数加入这两个依赖项 结束-->

第二步修改消费者配置文件的配置,我用的是yaml文件

#get请求对象传参时,需要开启这个
feign:
  httpclient:
    enabled: true

二、实现一个服务

第一个定一个接口

image.png

如图 参数前必须加@requestBody注解,上部注解中必须加入consumes的配置,这里值等于application/json ,不然会报com.netflix.client.ClientException异常。

第二,实现接口方法

/**
 * post对象传参,在实现服务里的参数也必须加上 @RequestBody ,不然获取的对象仍然没有值
 *
 * @param user
 * @return
 */
@Override
public String postAndParam(@RequestBody User user) {
    log.info("post name:{}", user.getName());
    return user.toString();
}

/**
 * get对象传参,在实现服务里的参数也必须加上 @RequestBody ,不然获取的对象仍然没有值
 *
 * @param user
 * @return
 */
@Override
public String getAndParam(@RequestBody User user) {
    log.info("get name:{}", user.getName());
    return user.toString();
}

同样的,在实现方法中也要加入@RequestBody注解。


期待你一针见血的评论,Come on!