fegin参数传递
  2UN18b7Ntwli 2023年11月19日 32 0

Feign传递参数
传递单个参数:
单个参数的传值有两种方式,第一种
使用@RequestParam/@PathVariable进行传值

客户端feign调用接口(@RequestParam)

@RequestMapping("/ct/selectOne")
Customer selectOne(@RequestParam("id") Integer id);

 

服务提供端

@RequestMapping("selectOne")
public Customer selectOne(Integer id) {
return this.customerService.queryById(id);

客户端feign调用接口(@PathVariable)

@GetMapping("/admin/selectOne/{id}")
String selectOne(@PathVariable("id") Integer id);

服务提供端

@RequestMapping("selectOne/{id}")
@HystrixCommand(fallbackMethod = "HystrixqueryById")
public Admin selectOne(@PathVariable("id") Integer id) {
Admin bean = adminService.queryById(id);
if(bean == null){
throw new RuntimeException("id:"+id+"没有找到该id的用户");
}
return bean;
}

注意:
1、在使用@RequestParam/@PathVariable进行传值时,一定要注意,需要绑定参数,如@RequestParam(“id”)绑定id,不然会报错

2、@PathVariable是获取url上数据的,@RequestParam获取请求参数的(包括post表单提交)

传递多个参数:
多个参数的传值可以使用多个@RequestParam来进行传参

客户端feign调用接口

@RequestMapping("/ct/upload")
Customer upload(@RequestParam("newFileName") String newFileName,
@RequestParam("id") int id);

 

服务提供端

@RequestMapping("upload")
public Customer upload(String newFileName,int id) throws IOException {

 

System.out.println("进入提供者-图片上传");
//设置图片上传路径,是目标文件夹的路径

// 保存到数据库

Customer customer=customerService.queryById(id);
customer.setImage(newFileName);

customerService.update(customer);

return customer;

}

传对象:
传对象有两种方式

第一种,使用@SpringQueryMap注解实现

客户端feign调用接口

@RequestMapping("/ev/insert")
Evaluation insert(@SpringQueryMap Evaluation evaluation);

服务提供端

@RequestMapping("insert")
public Evaluation insert(Evaluation evaluation) {
return evaluationService.insert(evaluation);
}

第二种,使用@RequestBody传递参数

客户端feign调用接口

@RequestMapping(value = "/admin/save", method = RequestMethod.POST)
Object save(@RequestBody Admin admin);

服务提供端

@PostMapping("save")
public Object save(@RequestBody Admin admin){
boolean result = false;
//判断是添加还是编辑
if(admin.getId()!=null){

//编辑

// System.out.println("编辑管理员信息");
result = adminService.update(admin)>0;
} else {
//添加
admin.setRegDate(new Date());
// System.out.println("添加管理员信息"+admin);
result = adminService.insert(admin).getId() != null;
}
return result;
}

重点:多个参数+对象的传值
在进行多个参数+对象传值时,使用@RequestParam来传递普通参数,使用@SpringQueryMap来传递对象

注:
本人亲测踩坑
使用@RequestParam+@RequestBody的时候,出现问题
@RequestBody要求前端页面返回json格式,否则会报:不支持Content-Type:application/json的错误

客户端feign调用接口

@RequestMapping(value = "/admin/queryAll", method = RequestMethod.POST)
String queryAll(@RequestParam("page") Integer page,
@RequestParam("limit") Integer limit,
@SpringQueryMap AdminQuery admin);

服务提供端

@PostMapping("queryAll")
public Object queryAll(Integer page, Integer limit,AdminQuery admin) {
CommonResult<Admin> result = new CommonResult<>();
IPage<Admin> ipage = adminService.queryAllByLimit(page,limit,admin);
result.setCode(0);
result.setCount(ipage.getTotal());
result.setData(ipage.getRecords());
return result;

}

 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
2UN18b7Ntwli