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

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

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

注意:

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

2.其他参数传递

  • POST:单个Obj对象传递,使用@RequestBody注解
    //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类似。
    //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));
    }

相关推荐

  1. React参数传递问题

    2024-04-30 08:14:01       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 08:14:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 08:14:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 08:14:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 08:14:01       20 阅读

热门阅读

  1. 小米金融守护消费权益,共筑金融和谐新篇章

    2024-04-30 08:14:01       11 阅读
  2. Ajax 解决浏览器缓存问题原理和例子

    2024-04-30 08:14:01       11 阅读
  3. 指数分布、瑞利分布和Nakagami-m的联系

    2024-04-30 08:14:01       11 阅读
  4. 在Mac上使用国内源安装 homebrew

    2024-04-30 08:14:01       12 阅读
  5. elementUI之el-select选择器赋值为空后无法选中回显

    2024-04-30 08:14:01       9 阅读
  6. 介绍一个在数据分析中常用的函数:data.iloc[]

    2024-04-30 08:14:01       14 阅读
  7. Tomcat Bootstrap init()

    2024-04-30 08:14:01       11 阅读
  8. CAPM模型特点

    2024-04-30 08:14:01       9 阅读
  9. Google云平台(Google Cloud Platform,简称GCP)

    2024-04-30 08:14:01       15 阅读
  10. Spring Boot面试知识点总结(经典15问)

    2024-04-30 08:14:01       12 阅读