定制软件feign调用接口参数可以为null吗_SpringCloud Feign参数问题及解决方法

定制软件这篇文章主要介绍了SpringCloud 定制软件参数问题及解决方法,定制软件文中通过示例代码介绍定制软件的非常详细,定制软件对大家的学习或者工作定制软件具有一定的参考学习价值,定制软件需要的朋友可以参考下

今天遇到使用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);

注:

参数前使用了@RequestBody注解的,都以POST方式消费服务

@RequestBody注解的参数,需要POST方式才能传递数据

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

可以接收到参数

总结:

请求参数前加上注解@PathVariable、@RequestParam或@RequestBody修饰

可以有多个@RequestParam,但只能有不超过一个@RequestBody

使用@RequestParam注解时必须要在后面加上参数名

@RequestBody用来修饰对象,但是既有@RequestBody也有@RequestParam,那么参数就要放在请求的url中,@RequestBody修饰的就要放在提交对象中

当参数比较复杂时,feign即使声明为get请求也会强行使用post请求

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关资源:
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发