使用feign客户端传参接收不到的问题及解决

 更新时间:2022年03月16日 09:56:16   作者:一缕82年的清风  
这篇文章主要介绍了使用feign客户端传参接收不到的问题及解决,具有很好的参考价值,希望对大家有所帮助。

feign客户端传参接收不到

使用feign客户端做不用服务之间的调用的时候出现了provider获取不到参数的问题,在此记录一下。

先来说一下流程

在我的微服务中,有这么几个角色,consumer: 服务的消费者,provider:服务的消费者,还有一个feign,主要就是provider的接口形式,然后consumer依赖了feign,去调用provider中的服务,我在provider中打印获取的参数,一直为空。

我这里,consumer, feign,provider都是单独的模块

我们来看下代码

首先是provider:提供了一个保存用户的服务

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
 
    @PostMapping("/save")
    public String save(User user){
        log.info("provider: 处理save请求,参数为:{}",user);
        return "success";
    }

feign代码:注意这个模块要添加feign依赖

@FeignClient(name = "service-provider",fallback = UserHystrix.class)
public interface UserController {
 
    @PostMapping("/user/save")
    String save(User user); 
}

然后使用consumer通过feign调用provider:注意 consumer依赖feign,上代码:

@RestController
@Slf4j
public class FeignController {
 
    @Autowired
    private UserController userController;
 
    @RequestMapping("/feign")
    public String test(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(10);
        log.info("feign调用开始。。。。");
        String result = userController.save(user);
        log.info("feign: 返回: {}", result);
        return "success";
    }   
}

各自服务启动后,浏览器调用consumer的 /feign请求,观察provider日志,发现获取到的User参数没有值。

如何解决

在provider中的方法里的User参数前面,加上  @RequestBody ,注意下面代码中的注释部分

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
 
    @PostMapping("/save")
    // 注意加上requestBody,否则容易接收不到参数
    public String save(@RequestBody User user){
        log.info("provider: 处理save请求,参数为:{}",user);
        return "success";
    } 
}

好了,为了方便大家观看,在给出以下项目结构吧:

feign传递参数!坑!

以下是FeignClient 注解的接口 中的一个抽象方法

@PostMapping("/bizTask/selectNonCompleteByShopIds")
List<BizTask> selectNonCompleteByShopIds(@RequestBody List<Long> shopIds); 

注意这里接口参数 shopIds,该方法的参数列表也必须和抽象方法一致,否则接不到参数

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis insert返回主键代码实例

    mybatis insert返回主键代码实例

    这篇文章主要介绍了mybatis insert返回主键代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java深入了解数据结构之优先级队列(堆)

    Java深入了解数据结构之优先级队列(堆)

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现
    2022-01-01
  • Spring使用注解进行对象注入的示例详解

    Spring使用注解进行对象注入的示例详解

    获取 Bean 对象也叫做对象装配,就是把对象取出来放到某个类中,有时候也叫对象注入,常见有关对象注入的注解有两个,一个是@Autowired,另外一个是@Resource,下面就来讲讲它们的具体使用吧
    2023-07-07
  • 详解Maven项目Dependencies常见报错及解决方案

    详解Maven项目Dependencies常见报错及解决方案

    这篇文章主要介绍了详解Maven项目Dependencies常见报错及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • SpringBoot+WebSocket+Netty实现消息推送的示例代码

    SpringBoot+WebSocket+Netty实现消息推送的示例代码

    这篇文章主要介绍了SpringBoot+WebSocket+Netty实现消息推送的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 使用Java编写GUI对话框的教程

    使用Java编写GUI对话框的教程

    这篇文章主要介绍了使用Java编写GUI对话框的教程,是Java图形化编程中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 详解java google Thumbnails 图片处理

    详解java google Thumbnails 图片处理

    这篇文章主要介绍了java google Thumbnails 图片处理的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java子类调用父类的私有属性的实现示例

    Java子类调用父类的私有属性的实现示例

    在Java中,我们都知道子类不能直接访问或修改父类的私有属性,本文主要介绍了Java子类调用父类的私有属性的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • jmeter+ant+jenkins自动化测试环境配置搭建过程

    jmeter+ant+jenkins自动化测试环境配置搭建过程

    在搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境、安装好jenkins以及配置好jmeter,这样才能省去很多的事情,对jmeter+ant+jenkins自动化测试环境配置搭建过程感兴趣的朋友一起看看吧
    2021-12-12
  • Maven Plugin的@Mojo和@Execute的具体使用

    Maven Plugin的@Mojo和@Execute的具体使用

    本文主要介绍了Maven Plugin的@Mojo和@Execute的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论