SpringCloud:feign对象传参和普通传参及遇到的坑解决

作者:神奇小白 时间:2023-02-17 11:18:58 

feign对象传参和普通传参及遇到的坑

对象传参

使用@RequestBody来指定传参对象


@RequestMapping(value = "/v2/matterCode/genCode", method = RequestMethod.POST)
    ResultResponse<String> getCode(@RequestBody MatterCodeBO matterCodeBO);

注意:@RequestBody在一个方法内有且只有一个,不能同时存在两个!

普通传参

普通传参使用@RequestParam来指定参数

@RequestMapping(value = "taskApiController/getAll", method = RequestMethod.POST)
List<TaskVO> getAll(@RequestParam("name") String name);

注意:@RequestParam必须指定参数名("name"),否则报错:RequestParam.value() was empty on parameter 0

遇到的坑-1

首先再次强调Feign是通过http协议调用服务的,重点是要理解这句话,

如果FeignClient中的方法有@PostMapping注解 ,则微服务TaskApiController中对应方法的注解也应当保持一致为@PostMapping,如果不一致,则会报404的错误 

调用失败后会触发它的熔断机制,如果@FeignClient中不写@FeignClient(fallback = TaskFeignClientDegraded.class),会直接报错

    11:00:35.686 [http-apr-8086-exec-8] DEBUG c.b.p.m.b.c.AbstractBaseController - Got an exception
com.netflix.hystrix.exception.HystrixRuntimeException: TaskFeignClient#getAll() failed and no fallback available.
    at com.netflix.hystrix.AbstractCommand$22.call(AbstractCommand.java:819)
    at com.netflix.hystrix.AbstractCommand$22.call(AbstractCommand.java:804)

遇到的坑-2

报错信息:

feign.FeignException:status 400 reading xxx#xxxx(String); content:

原因:因为feign的那个方法使用的@ReqestParam注解,这个接收的参数长度过长造成的,这也是feign就算使用post方法,参数也会放在请求地址后面,而不是放在请求体里面。

解决办法:将参数封装成对象,使用@RequestBody标明参数

feign传递复杂参数对象需要注意的地方

传递复杂参数对象需要用Post

另外需要注意,Feign不支持使用GetMapping 和PostMapping

@RequestMapping(value="user/save",method=RequestMethod.POST)

在传递的过程中

复杂对象使用@RequestBody进行注解,同时接收端也需要使用@RequestBody这个注解。 

我遇一个坑:

消费端使用了@RequestBody而服务端没有接收@RequestBody,这时参数会接收不完整。

//消费端
    @RequestMapping(value="user/save",method=RequestMethod.POST)
    public User save(@RequestBody User user);
//服务端
@PostMapping("save")
    public User save(@RequestBody User user) {
        System.out.println(user);
        return UserService.save(user);
    }

来源:https://blog.csdn.net/uotail/article/details/84673347

标签:feign,对象传参,普通传参
0
投稿

猜你喜欢

  • c#开发word批量转pdf源码分享

    2022-01-12 07:37:29
  • Android实现录音声波图

    2022-08-05 20:55:49
  • C#查找字符串所有排列组合的方法

    2022-07-04 10:01:54
  • Android编程滑动效果之Gallery仿图像集浏览实现方法

    2022-11-19 15:21:58
  • java 解析由String类型拼接的XML文件方法

    2022-07-10 12:47:14
  • Spring创建bean实例的几种方式分享

    2022-02-21 22:08:19
  • Spring Boot 2.X 快速集成单元测试解析

    2023-11-11 02:45:05
  • java 中死锁问题的实例详解

    2022-08-18 02:22:39
  • 详解Maven私 服Nexus的安装与使用

    2023-11-24 12:34:02
  • Android如何获取APP启动时间

    2021-11-13 06:13:47
  • Java使用POI导出Excel(二):多个sheet

    2022-11-26 02:09:44
  • C#队列Queue用法实例分析

    2023-02-27 22:35:14
  • Android实现彩信附件的添加与删除功能

    2023-04-14 01:02:28
  • JavaWeb Spring依赖注入深入学习

    2022-04-02 08:20:05
  • 关于Java虚拟机HotSpot

    2022-10-28 18:36:01
  • java unicode转码为中文实例

    2021-08-14 04:44:14
  • Java高级特性之反射机制实例详解

    2023-10-08 06:33:51
  • C#发送HttpPost请求来调用WebService的方法

    2021-06-11 03:36:30
  • flutter封装点击菜单工具栏组件checkBox多选版

    2022-08-16 08:18:59
  • Android实现支持所有View的通用的下拉刷新控件

    2022-07-29 10:40:36
  • asp之家 软件编程 m.aspxhome.com