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

在微服务项目的开发过程中,远程数据接口调用是必需的操作。其中绝大部分的接口写法和用法与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("/updateNoticeInfo")
    public AjaxResult dynamicUpdateNoticeInfo(@RequestBody NoticeDTO noticeDTO) {
        return AjaxResult.success(noticeService.updateNotice(noticeDTO));
    }
  • GET请求:多个属性传递,使用@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(NoticeDTO dto) {
        return R.ok(noticeService.dynamicSelectNoticeList(dto));
    }
相关推荐
市场部需要一个软件开发岗位13 分钟前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑25 分钟前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
程序员泠零澪回家种桔子44 分钟前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain1 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Anastasiozzzz2 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人2 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战2 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘2 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays10112 小时前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
摇滚侠2 小时前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea