千家信息网

SpringCloud如何通过Feign传递List类型参数

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,小编给大家分享一下SpringCloud如何通过Feign传递List类型参数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2025年11月16日SpringCloud如何通过Feign传递List类型参数

小编给大家分享一下SpringCloud如何通过Feign传递List类型参数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

通过Feign传递List类型参数

首先明确一点,SpringCloud通过Fegin如果是多个参数,其中一个参数是List,那么是传不过去的,单个List是可以的。

1、单个List实体传递

@RequestMapping("/secret/batchInsert")public int batchInsert(@RequestBody List batchSecretBOList){    return batchSecretService.batchInsert(batchSecretBOList);}

2、基本类型传递

基本类型可以通过数组的方式传递,代码如下所示:

@RequestMapping(value = "/stat/merchant/get_merchant_compare_info", method = RequestMethod.POST)@ResponseBodyMerchantCompareTotalInfo getMerchantCompareInfo(@RequestParam("licenseNoList") String[] licenseNoList);

3、实体类型传递

实体类型可以通过FastJson将List转换为String之后进行传递,代码如下:

//调用方代码String contracts = JSONObject.toJSONString(contractBOList);contractDao.contractBatchSetRedis(contracts , 60 * 60); //接收方代码@PostMapping("/contract/contractBatchSetRedis")void contractBatchSetRedis(@RequestParam("contractBOList") String contractBOList, @RequestParam("expire") long expire) {    List contracts = JSONObject.parseArray(contractBOList, ContractBO.class);    if (contracts == null || contracts.size() == 0) {         return;    }    //批量set数据    redisUtil.getRedisTemplate().executePipelined((RedisCallback) connection -> {        for (ContractBO contract : contracts) {            connection.setEx((RedisPrefixConst.CONTRACT_PREFIX + contract.getBusinessCode() + RedisPrefixConst.UNDERLINE_SEPARATOR + contract.getContractNo()).getBytes(), expire, JSONObject.toJSONString(contract).getBytes());        }        return null;    });}

fegin局限性较多,如果要传递List只能通过以上方法转换成字符串后,再进行参数传递。

Feign在参数为List时的坑

我们在使用Feign进行服务接口调用时,有时候会有接口参数为List集合的时候,不能使用List接口类作为参数,只能用List的实现类。

错误写法

正确写法

以上是"SpringCloud如何通过Feign传递List类型参数"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0