广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringCloud:feign对象传参和普通传参及遇到的坑解决
  • 936
分享到

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

2024-04-02 19:04:59 936人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录feign对象传参和普通传参及遇到的坑对象传参普通传参遇到的坑-1遇到的坑-2feign传递复杂参数对象需要注意的地方传递复杂参数对象需要用Post在传递的过程中feign对象传

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);
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

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

本文链接: https://www.lsjlt.com/news/142634.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringCloud:feign对象传参和普通传参及遇到的坑解决
    目录feign对象传参和普通传参及遇到的坑对象传参普通传参遇到的坑-1遇到的坑-2feign传递复杂参数对象需要注意的地方传递复杂参数对象需要用Post在传递的过程中feign对象传...
    99+
    2022-11-13
  • SpringCloud feign对象传参和普通传参及遇到的坑如何解决
    这篇文章主要介绍“SpringCloud feign对象传参和普通传参及遇到的坑如何解决”,在日常操作中,相信很多人在SpringCloud feign对象传参和普通传参及遇到的坑如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-06-29
  • feignGET请求不支持对象传参的坑及解决
    目录GET请求不支持对象传参问题解决方法feign发get请求遇到的坑问题原因分析加上@RequestParam后问题解决GET请求不支持对象传参 问题 @GetMapping("/...
    99+
    2022-11-13
  • vue路由传参接收以及传参对象为对象时的问题及解决
    目录路由传参接收以及传参对象为对象时的问题场景接收路由参数vue路由传参总结Vue路由传参路由传参接收以及传参对象为对象时的问题 具体代码如下所示: 场景 <div @clic...
    99+
    2022-11-13
  • feign GET请求不支持对象传参的坑怎么解决
    这篇“feign GET请求不支持对象传参的坑怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“feign&n...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作