V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liian2019
V2EX  ›  Java

大哥们, springboot RestTemplate 的 exchange delete 可以传递 list 为参数吗

  •  
  •   liian2019 · 2021-03-25 12:00:29 +08:00 · 1617 次点击
    这是一个创建于 1347 天前的主题,其中的信息可能已经有所发展或是发生改变。

    接口是这样的

        @DeleteMapping
        @ApiOperation("删除数据")
        public R<Boolean> delete(@RequestParam("idList") List<Long> idList) {
            return success(this.jobJdbcDatasourceService.removeByIds(idList));
        }
    

    我的调用方式是这样的

    @Override
        public void deleteDataSource(List<String> ids) {
            if (CollectionUtils.isEmpty(ids)){
                return;
            }
            List<Long> datasourceIds = 			   ids.stream().map(Long::parseLong).collect(Collectors.toList());
            MultiValueMap<String,Object> params = new LinkedMultiValueMap<>();
            params.add("idList",datasourceIds);
            HttpEntity<MultiValueMap<String,Object>> entity = new HttpEntity<>(params,new HttpHeaders());
            ResponseEntity<DataXResponse> exchange = restTemplate.exchange(adminServer + dataSourcePath,HttpMethod.DELETE,entity,DataXResponse.class);
            boolean isSuccess = this.handleResponse(exchange,Boolean.class);
            if (!isSuccess){
                throw new FastdataException(FastdataPlatErrorCode.REST_CALL_FAILED.getCode(),"删除失败");
            }
        }
    

    然后服务端报错了

    Caused by: java.lang.NumberFormatException: For input string: "[12]"
    

    意思就是需要一个 list,但是接受到一个 string

    有大哥遇到过这样的情况吗

    8 条回复    2021-03-30 18:29:55 +08:00
    ouyc
        1
    ouyc  
       2021-03-25 12:29:16 +08:00 via Android   ❤️ 1
    试试传一个用 , 隔开的字符串表示的 list
    hantsy
        2
    hantsy  
       2021-03-25 13:38:09 +08:00
    标准的 Uri 这种参数传递应该都是支持三种格式的。

    1. uri?a=1&a=2&a=3
    2. uri?a=1,2,3
    3. uri?a[]=1&a[]=2&a[]=3

    如果你的生成 URI 不是的话,肯定会有问题。
    liian2019
        4
    liian2019  
    OP
       2021-03-25 14:33:13 +08:00
    @ouyc 还真是,这是什么原理大佬
    liian2019
        5
    liian2019  
    OP
       2021-03-25 14:33:29 +08:00
    @hantsy 好的 谢谢你
    liian2019
        6
    liian2019  
    OP
       2021-03-25 14:35:40 +08:00
    @hantsy 谢谢大佬
    ouyc
        7
    ouyc  
       2021-03-29 16:19:18 +08:00 via Android
    @liian2019 这里是 http 协议 url 的参数部分,一般传的都是字符串,同时 spring mvc 定义了复杂参数传递的规则。复杂点的数据例如指定数组下标传参的和可以用
    @hantsy 这种方式,传一整个数组就是 , 隔开的方式
    liian2019
        8
    liian2019  
    OP
       2021-03-30 18:29:55 +08:00
    @ouyc 多谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2452 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 04:51 · PVG 12:51 · LAX 20:51 · JFK 23:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.