feign实现传递参数的三种方式小结

 更新时间:2021年06月24日 17:35:14   作者:想喝咖啡的Alex  
这篇文章主要介绍了feign实现传递参数的三种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

需要注意的一点是,feign好像是无法传递list集合类型的,但是你可以通过传递对象类型,然后在接收方再次将对象装在集合中达到集合传递的效果

传递方式一:传递的都是基本数据类型

restful风格参数,用@PathVariable写着走就行了

传递方式二:传递数组类型的参数

不使用restful风格,直接用@RequestParam声明参数之间的对应关系。

传递方式三:传递带有对象的参数

1.使用restful风格的参数要用@Pathvarible声明参数对应关系,@Pathvariable用于非字符串参数。

2.不适用restful风格的字符串参数用@Requestparam,

3.对象必须用@RequestBody注解声明

特别小知识:

默认情况下,Feign会将标有@RequestParam注解的参数转换成字符串添加到URL中,将没有注解的参数通过Jackson转换成json放到请求体中。

注意,如果在@RequetMapping中的method将请求方式指定为POST,那么所有未标注解的参数将会被忽略

spring cloud feign传参注意

最近在用SpringCloud尝试重构以前的项目,使用Feign客户端组件来调用微服务,经常出现参数传不过去变成null的问题,网上查了一下发现feign在参数上的使用还是有一定的限制的,主要是要注意:

  1. 当参数比较复杂时,feign即使声明为get请求也会强行使用post请求
  2. 不支持@GetMapping类似注解声明请求,需使用@RequestMapping(value = “url”,method = RequestMethod.GET)
  3. 使用@RequestParam注解时必须要在后面加上参数名

写了一个简单案例,同时传输一个对象和一个字符串作为请求参数,主要关注参数的声明,其余比如eureka和feign的依赖和配置和后续使用相关的知识请另行查阅。仅供参考:

服务端(生产者)

准备:

  1. 已经配置将服务注册在eureka,服务名为“item-service”
  2. service层和dao层已经实现好了

逻辑:ItemController接收参数,调用service层,service中为商品Item对象添加详情desc,然后调用dao保存Item对象,返回Result结果封装对象

@RestController
public class ItemController {
@Autowired
private ItemService itemService;
/**
 * 添加
 * @param item
 * @param desc
 * @return
 */
@RequestMapping("/item/save")
public Result addItem(@RequestBody Item item, @RequestParam("desc") String desc){
    return itemService.addItem(item, desc);
}
}

客户端(消费者)

准备:已经配置注册到eureka

逻辑:

声明ItemFeignClient调用eureka上名为"item-service"的服务,返回Result对象

使用Post请求,传递两个参数:

TbItem对象,使用@RequestBody来声明

String字符串,使用@RequestParam(“xxx”)来声明

@FeignClient("item-service")
public interface ItemFeignClient {
 
    /**
     * 添加
     * @param item
     * @param desc
     * @return
     */
    @RequestMapping(value = "/item/save",method = RequestMethod.POST)
    Result addItem(@RequestBody TbItem item, @RequestParam("desc") String desc); 
 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入解析Java的Hibernate框架中的一对一关联映射

    深入解析Java的Hibernate框架中的一对一关联映射

    这篇文章主要介绍了Java的Hibernate框架的一对一关联映射,包括对一对一外联映射的讲解,需要的朋友可以参考下
    2016-01-01
  • SpringBoot监控SQL运行情况的流程步骤

    SpringBoot监控SQL运行情况的流程步骤

    Druid是Java语言中最好的数据库连接池,虽然 HikariCP 的速度稍快,但是,Druid能够提供强大的监控和扩展功能 ,也是阿里巴巴的开源项目,本文给大家介绍了SpringBoot监控SQL运行情况的流程步骤,需要的朋友可以参考下
    2024-03-03
  • springboot静态资源的配置方式

    springboot静态资源的配置方式

    这篇文章主要介绍了springboot静态资源的配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java如何根据不同系统动态获取换行符和盘分割符

    Java如何根据不同系统动态获取换行符和盘分割符

    这篇文章主要介绍了Java如何根据不同系统动态获取换行符和盘分割符,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 地址到经纬度坐标转化的JAVA代码

    地址到经纬度坐标转化的JAVA代码

    这篇文章介绍了地址到经纬度坐标转化的JAVA代码,有需要的朋友可以参考一下
    2013-09-09
  • SpringMVC @RequestBody自动转json Http415错误的解决

    SpringMVC @RequestBody自动转json Http415错误的解决

    这篇文章主要介绍了SpringMVC @RequestBody自动转json Http415错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 剖析Spring WebFlux反应式编程设计及工作原理

    剖析Spring WebFlux反应式编程设计及工作原理

    这篇文章主要为大家介绍了Spring WebFlux反应式编程模型工作原理的剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-02-02
  • idea使用Vim的技巧大全分享

    idea使用Vim的技巧大全分享

    vim是一个高度可配置的文本编辑器,非常稳定,可以高效的创建任何文本、持久的、多级撤销树、支持数百种变成语言和格式、与许多工具集成,本文给大家分享了idea使用Vim的技巧大全,需要的朋友可以参考下
    2024-05-05
  • 基于Java实现Json文件转换为Excel文件

    基于Java实现Json文件转换为Excel文件

    这篇文章主要为大家详细介绍了如何利用Java实现Json文件转换为Excel文件,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-12-12
  • Spring boot2.0 日志集成方法分享(1)

    Spring boot2.0 日志集成方法分享(1)

    这篇文章主要介绍了Spring boot2.0 日志集成方法分享,Spring Boot使用Apache的Commons Logging作为内部的日志框架,其仅仅是一个日志接口,在实际应用中需要为该接口来指定相应的日志实现,下文日志实现详情需要的小伙伴可以参考一下
    2022-04-04

最新评论