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

作者:想喝咖啡的Alex 时间:2021-06-18 00:09:53 

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

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

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

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

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

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

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

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

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

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

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

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

特别小知识:

默认情况下,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);

来源:https://blog.csdn.net/m0_45294725/article/details/109880416

标签:feign,传递,参数
0
投稿

猜你喜欢

  • Spring MVC Mybatis多数据源的使用实例解析

    2022-02-13 20:37:19
  • C#实现简单聊天程序的方法

    2022-01-02 22:31:20
  • springboot实现基于aop的切面日志

    2022-09-09 11:53:11
  • Android学习之AppWidget笔记分享

    2022-04-10 21:25:46
  • Gradle的安装和环境变量的配置详解

    2023-07-11 04:56:37
  • Java8 Optional原理及用法解析

    2022-04-22 16:37:58
  • 使用MyBatisPlus自动生成代码后tomcat运行报错的问题及解决方法

    2022-02-23 05:24:55
  • spring MVC实现简单登录功能

    2023-11-13 05:20:48
  • maven依赖版本没有按照最短路径原则生效的解决方案

    2023-04-04 20:49:09
  • java:程序包org.springframework.boot不存在的完美解决方法

    2023-09-03 20:37:32
  • 基于C#实现的木马程序实例详解

    2023-02-25 20:05:03
  • Java如何执行cmd命令

    2022-05-02 09:54:45
  • Android 三级NestedScroll嵌套滚动实践

    2022-11-12 07:45:21
  • SpringCloud学习笔记之SpringCloud搭建父工程的过程图解

    2022-10-28 02:38:30
  • JAVA过滤标签实现将html内容转换为文本的方法示例

    2022-10-16 21:02:40
  • Android搭建grpc环境过程分步详解

    2023-02-16 01:41:31
  • Java多线程读写锁ReentrantReadWriteLock类详解

    2023-03-09 07:01:54
  • 在Android开发中替换资源图片不起作用的解决方法

    2022-05-18 03:15:28
  • unity实现翻页效果

    2022-09-01 17:10:15
  • C#的通用DbHelper类(支持数据连接池)示例详解

    2022-01-14 11:59:56
  • asp之家 软件编程 m.aspxhome.com