时间:2021-05-20
这篇文章主要介绍了SpringCloud Feign参数问题及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
今天遇到使用Feign调用微服务,传递参数时遇到几个问题
1.无参数
以GET方式请求
服务提供者
@RequestMapping("/hello")public String Hello(){ return "hello,provider";}服务消费者
@GetMapping("/hello")String hello();2.单个参数
(1)GET——@PathVariable
服务提供者
@GetMapping("/test/{name}")public String test(@PathVariable String name){ return "hello,"+name;}服务消费者
@GetMapping("/test/{name}")String test(@PathVariable("name") String name);(2)GET——@RequestParam
服务提供者
@RequestMapping("/test")public String test(String name){return "hello,"+name;}服务消费者
@RequestMapping("/test")String test(@RequestParam String name);会遇到报错
RequestParam.value() was empty on parameter 0解决方法:
加上注解的描述,修改为
@RequestMapping("/test")String test(@RequestParam("name") String name);(3)POST
@RequestBody
不需要注解的描述
@RequestMapping("/test")String test(@RequestBody String name);注:
2.Feign多参数的问题
(1)GET——@PathVariable
服务提供者
@GetMapping("/test/{name}/{xyz}")public String test(@PathVariable String name,@PathVariable String xyz){ return "hello,"+name+","+xyz;}服务消费者
@GetMapping("/test/{name}/{xyz}")String test(@PathVariable("name") String name,@PathVariable("xyz") String xyz);(1)GET——@RequestParam
服务提供者
@RequestMapping("/test")public String test(String name,Integer type){ if(type==1){ return "hello,"+name; }else{ return "hello,provider-"+name; }}服务消费者
@RequestMapping("/test")String test(String name, Integer type);会遇到报错Method has too many Body parameters
说明:
如果服务消费者传过来参数时,全都用的是@RequestParam的话,那么服务提供者的Controller中对应参数前可以写@RequestParam,也可以不写
服务消费者feign调用时,在所有参数前加上@RequestParam注解
正确的写法
@RequestMapping("/test")String test(@RequestParam("name") String name, @RequestParam("type") Integer type);(2)POST
如果接收方不变
服务消费者
@RequestMapping("/test")String test(@RequestBody String name, @RequestBody Integer type);会遇到报错Method has too many Body parameters
服务消费者为
@RequestMapping("/test")String test(@RequestBody String name, @RequestParam("type") Integer type);name的值会为null
说明:
如果服务消费者传过来参数,有@RequestBody的话,那么服务提供者的Controller中对应参数前必须要写@RequestBody
正确的写法
服务提供者
@RequestMapping("/test") public String test(@RequestBody String name, Integer type){ if(type==1){ return "hello,"+name; }else{ return "hello,provider-"+name; } }服务消费者正确的写法
@RequestMapping("/test")String test(@RequestBody String name, @RequestParam("type") Integer type);可以接收到参数
总结:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言在SpringCloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢?造成该问题的原因Hystri
在SpringCloud的Feign组件中并不支持文件的传输,会出现这样的错误提示:feign.codec.EncodeException:class[Lorg
springcloud配置智能路由zuul后转发请求指定的方法后会导致cookie无法获取的问题,主要解决方法是再application配置文件中加入sensi
解决方法:补充:idea中yml文件图标小绿叶变成小网格问题及自动提示失效解决方法idea中yml文件图标小绿叶变成小网格问题及自动提示失效解决方法.yml文件
Feign的使用Feign也是网飞开发的,SpringCloud使用Feign非常简单,我下边演示一下:首先服务消费者这边肯定需要一个对应的依赖:compile