Feign的三种传参方式
1 路径拼接传参@RequestParam
路径拼接传参就是在路径后面添加 ? 和值
1.1 先在消费者的controller中增加一个方法
@RequestMapping("/deleteUserById")//请求路径
public User deleteUserById(Integer id) {//由于是路径拼接传参,这里的参数不需要加注解
return userFeign.deleteUserById(id);
}
1.2 在UserFeign中增加被调用的方法
参数添加注解@RequestParam
@RequestMapping(value = "/deleteUserById")
User deleteUserById(@RequestParam("id") Integer id);
1.3在提供者中增加方法
controller
@RequestMapping(value = "/deleteUserById")
User deleteUserById(@RequestParam("id") Integer id) {
return userService.deleteUserById(id);
}
接口和实现类
User deleteUserById(Integer id);
@Override
public User deleteUserById(Integer id) {
return new User(0-id, "小明1", 80);
}
1.4测试路径拼接传参
2 Restful风格传递参数@PathVariable
2.1 先在消费者的controller中增加一个方法
@RequestMapping("/getUserById/{id}")
public User getUserById(@PathVariable("id") Integer id) {
return userFeign.getUserById(id);
}
2.2 在UserFeign中增加被调用的方法
参数添加注解@PathVariable
@RequestMapping(value = "/getUserById/{id}")
User getUserById(@PathVariable("id") Integer id);
2.3在提供者中增加方法
controller
//方法的访问路径
@RequestMapping("/getUserById/{id}")
public User getUserById1(@PathVariable("id") Integer id) {
return userService.getUserById(id);
}
接口和实现类
User getUserById(Integer id);
@Override
public User getUserById(Integer id) {
return new User(id, "小明1", 22);
}
2.4 测试Restful风格传参
3 对象传参@RequestBody
3.1 先在消费者的controller中增加一个方法
@RequestMapping("/addUser")
public User addUser(User user) {
return userFeign.addUser(user);
}
3.2 在UserFeign中增加被调用的方法
以对象传参需要加上@RequestBody注解
@RequestMapping(value = "/addUser")
User addUser(@RequestBody User user);
3.3 在提供者中增加方法
controller
@RequestMapping(value = "/addUser")
User addUser(@RequestBody User user) {
return userService.addUser(user);
}
接口和实现类
User addUser(User user);
@Override
public User addUser(User user) {
return user;
}
3.4 测试对象传参
4 总结
总之 ? 传参就用@RequestParam,获取请求参数并提交就用@PathVariable,对象传参就用@RequestBody,特别注意的是@RequestParam和@PathVariable的value值都要写出来,不然浏览器识别不了,而Java中万物皆对象,比如Map,Set,List等等,都可以当做对象以@RequestBody传递参数