SpringCloud特殊问题处理1——通过Feign传递List类型参数

embedded/2024/12/22 16:01:25/

在微服务项目的开发过程中,远程数据接口调用是必需的操作。其中绝大部分的接口写法和用法与api相似,但是对于List<Obj>这种对象的参数使用需要异常关注。

1.List<Obj>对象集合参数传递

注意:

  • Feign接口不能直接使用List<Obj>传参,需要通过json转成字符串
  • 如果是List<单属性>,如List<String>则无需转化,按api接口规范直接传递即可。
  • 另外需要注意对参数大小的限制
feign客户端
java">    /*** 批量新增来自外部通知提醒数据* 1.Feign接口不能直接使用List<Obj>传参,需要通过json转成字符串* 2.另外需要注意对参数大小的限制* @param dtoStr*/@PostMapping(value = "/batchAddNotice")void batchAddNoticeData(@RequestParam("dtoList") String dtoStr);
服务提供方
java">    /*** 批量新增来自外部调用的通知数据* @param dtoStr*/@PostMapping(value = "/batchAddNotice")public void batchAddNoticeData(@RequestParam("dtoList") String dtoStr) {List<NoticeDTO> dtoList = JSONArray.parseArray(dtoStr.trim(), NoticeDTO.class);noticeService.batchAddNoticeData(dtoList);}
服务调用方
java">/**
* 仅展示部分关键代码
* List<Obj>须通过FastJson将其转换为String之后再进行传递
**/
if(CollectionUtils.isNotEmpty(noticeDTOList)){remoteNoticeService.batchAddNoticeData(JSONObject.toJSONString(noticeDTOList,SerializerFeature.DisableCircularReferenceDetect));}

2.其他参数传递

  • POST:单个Obj对象传递,使用@RequestBody注解
java">    //feign客户端@PostMapping("/test/updateNoticeInfo")void dynamicUpdateNoticeInfo(@RequestBody NoticeDTO noticeDTO);//服务提供方@PostMapping(value = "/batchAddNotice")public void batchAddNoticeData(@RequestParam("dtoList") String dtoStr) {List<NoticeDTO> dtoList = JSONArray.parseArray(dtoStr.trim(), NoticeDTO.class);noticeService.batchAddNoticeData(dtoList);}
  • GET:单个Obj对象传递,使用@SpringQueryMap注解

注意:

  • 该注解是Spring Cloud OpenFeign提供的,也可以用于feign客户端,OpenFeign提供的QueryMap注解与Spring不兼容
  • 该注解用于将POJO或Map参数注释为查询参数映射,与Spring类似。
java">    //feign客户端@GetMapping("/test/getNoticeList")R<List<NoticeDTO>> dynamicGetNoticeList(@SpringQueryMap NoticeDTO dto);//服务提供放端@GetMapping("/selectNoticeList")public R<List<NoticeDTO>> dynamicSelectNoticeList(NoticeDTOdto) {return R.ok(noticeService.dynamicSelectNoticeList(dto));}


http://www.ppmy.cn/embedded/24106.html

相关文章

「51媒体」2024年北京有哪些媒体邀约资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 北京的媒体邀约资源非常丰富&#xff0c;涵盖了多种类型的平台&#xff0c;包括但不限于&#xff1a; 广播电视台&#xff1a;总台&#xff0c;北京地方电视台&#xff0c;教育电视台&am…

使用OkHttp 缓存 API 调用提高Android应用性能

使用OkHttp 缓存 API 调用提高Android应用性能 坦率地说&#xff0c;我们都遇到过这样的情况——焦急地刷新应用&#xff0c;看着加载图标不停地旋转&#xff0c;等待那个至关重要的 API 响应。这样的等待我们已经是炉火纯青了&#xff0c;是吧&#xff1f;手指有节奏地轻敲屏…

课程34:Windows Docker部署.Net Core项目

这里写目录标题 🚀前言一、安装Docker Desktop1.1 官网下载Docker1.2 安装Docker1.2.1 选择配置,默认都勾选1.2.2 安装中1.2.3 安装成功1.2.4 启动1.2.5 启动成功二、.Net Core 项目发布与部署2.1 修改Dockerfile文件2.2 Web项目发布2.3 修改配置2.3.1 修改dockerfile<

Python基本数据类型

描述 Python是一种高级编程语言&#xff0c;拥有丰富的数据类型用于表示不同类型的数据。基本数据类型可以分为数值型&#xff08;Numbers&#xff09;、字符串型&#xff08;Strings&#xff09;、布尔型&#xff08;Booleans&#xff09;、空值&#xff08;NoneType&#xff…

Redis缓存介绍以及常见缓存问题:穿透、雪崩和击穿

概念 缓存就是数据交换的缓冲区&#xff08;Cache&#xff09;&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 作用&#xff1a; 降低后端负载 提高读写效率&#xff0c;降低相应时间 成本&#xff1a; 数据一致性成本 代码维护成本 运维成本 缓存更…

稳扎稳打 部署丝滑 开源即时通讯(IM)项目OpenIM源码部署流程(linux windows mac)

背景 OpenIM包含多个关键组件&#xff0c;每个都是系统功能必不可少的一部分。具体来说&#xff0c;MongoDB 用于持久化存储&#xff1b;Redis 用作缓存&#xff1b;Kafka 用于消息队列&#xff1b;Zookeeper 用于服务发现&#xff1b;Minio 用于对象存储。这些组件的众多可能会…

为什么选择OpenNJet?OpenNJet下一代云原生应用引擎!OpenNJet开发实战!

前言导读 在当今这个数字化转型加速的时代&#xff0c;云原生技术已成为企业和开发者构建现代应用的首选路径。OpenNJet作为新一代云原生应用引擎&#xff0c;在国内外技术社区受到了广泛关注。 本文将深入探讨OpenNJet的特点、优势以及在开发实践中的应用&#xff0c;带您全…

嵌入式开发_DMA详解

在嵌入式开发的广阔天地中&#xff0c;MCU是众多开发者手中的利器。而DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;技术&#xff0c;则如同一位高效的快递小哥&#xff0c;穿梭于处理器与外设之间&#xff0c;无需CPU亲自出马&#xff0c;高效地搬…