Spring Cloud FeignClient传递参数方式(全剧终)

教程分享 > Java教程 > Spring Cloud (125) 2024-08-07 11:09:40

前言

最近在学习springcloud,在进行springboot拆分成springcloud项目的时候,我使用feign来进行微服务的调用,遇到了一些坑,特此总结,谨记

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

注意:

  • 在使用@RequestParam/@PathVariable进行传值时,一定要注意,需要绑定参数,如@RequestParam(“id”)绑定id,不然会报错
  • @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传递参数

@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+@RequestBody的时候,出现问题

@RequestBody要求前端页面返回json格式,否则会报:不支持Content-Type:application/json的错误

 

解决办法:

登录后查阅

此处内容已经隐藏,需要登录后刷新查阅

登录/注册

 

扩展参考:Spring Cloud FeignClient 自定义复杂对象参数解析

 

https://www.leftso.com/article/2408062037179947.html

相关文章
Spring Cloud FeignClient fallbackFactory配置详解一般FeignClient需要指定一个fallbackFactory或者fallback,一个一个接口的实...
前言最近在学习springcloud,在进行springboot拆分成springcloud项目的时候,我使用feign来进行微服务的调用,遇到了一些坑,特此总
@FeignClient 配置 fallback无效 解决检查配置文件中是否有以下配置片段feign: hystrix: enabled: true该配置不依赖
如何支持直接传递自定义对象那么我们希望能有一种方式保持跟controller完全一致只需要传递自定义的对象,既让服务提供端开发人员爽,也让服务消费端开发人员爽,
1. 什么是 spring cloud?spring cloud 是一系列框架的有序集合
随着Spring Cloud 的越来越流行,国内很多公司也在开始使用该框架了
feign-client在第一次调用微服务会出现Read timed out异常,提示的报错信息:java.net.SocketTimeoutException: Read timed out ...
环境说明spring cloud 2021.04 spring cloud alibaba 2021.0.4 spring boot 2.6.13 nacos 2.2.3 问题排查...
项目源码下载:(访问密码:9987)Spring-Cloud-Circuit-Breaker.zip学习在调用底层微服务的同时利用调用的Spring Cloud Netflix堆栈组件之一Hys...
演示项目源码下载:(访问密码:9987)spring-cloud-zipkin.zipZipkin是非常有效的工具分布追踪在微服务生态系统
演示项目源码下载:(访问密码:9987)spring-cloud-config-server-git.zip微服务方法现在已经成为任何新 API 开发的行业标准,几乎所有组织都在推广它
演示项目源码下载:(访问密码:9987)Spring-Cloud-discovery-server.zip 了解如何创建微服务的基础上,Spring Cloud,对Netflix的Eureka注...
我们知道spring boot可以通过文件名来区分配置,如下:application.ymlapplication-dev.yml #开发环境application-test.yml #测试环境...
在这个 Spring cloud 教程中,学习在 spring boot/cloud 项目中使用 Netflix Ribbon 使用客户端负载平衡
演示项目源码下载:(访问密码:9987)Spring-Cloud-Consoul.zip了解如何创建微服务的基础上Spring cloud,对登记HashiCorp Consul注册服务器,以及...