V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhuzhibin
V2EX  ›  问与答

小白请教一个关于 SpringBoot @RequestParam 注解 Get 请求接收前端数组入参问题

  •  
  •   zhuzhibin · 262 天前 · 718 次点击
    这是一个创建于 262 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:

    最近有些项目的接口往 Java 迁移,本人半桶水边看边写边学,有个 GET 请求的接口需要前端请求 URL 大致为:

    /api/query?id[0]=1&id[1]=2&id[2]=3 ,也就是并没有 URL 编码(想必很多人会提到逗号分割的请求,这里有历史背景,前端都是这样传,先别让我改成 POST )

    我这边要怎样去接这个入参。。我暂时用了一个最笨的办法 Map(String,String) params

    params 的打印结果大概是:id[0]-> 1 ,然后去获取 params.value 。。

    单纯想请教一下各位大佬们,对了,目前 relaxed-query-chars 设置了 "[,]",否则 http 请求无法解析,直接提示 Bad request ,因为前端没有 urlencode 的问题

    9 条回复    2023-08-09 21:32:13 +08:00
    zhuzhibin
        1
    zhuzhibin  
    OP
       262 天前
    查了 ChatGPT 很多都不行。。例如说用 @RequestParam("id[]") String[] id 的方式来接之类的,都不行,在不让前端调整的情况下,一开始想直接切换 post 。。。但是想了想,遵循 restful api 风格就暂时用 Map(String,String) params 的办法来接了。。我太菜了
    xgfan
        2
    xgfan  
       262 天前
    让前端改成 /api/query?id=1&id=2&id=3 ,后端就能用数组/列表拿到了。
    或者拿 servlet request 一把梭
    zhuzhibin
        3
    zhuzhibin  
    OP
       262 天前 via iPhone
    @xgfan 单纯讨论这个问题,你说的我都懂
    Jiubia
        4
    Jiubia  
       261 天前
    HandlerMethodArgumentResolver 应该可以解决你的问题
    mdn
        5
    mdn  
       261 天前
    传 string, url?ids=1,2,3,4,5,6,7 后端在分割成数组
    assiadamo
        6
    assiadamo  
       261 天前
    用 Map<String, String[]>类型试试
    zhuzhibin
        7
    zhuzhibin  
    OP
       261 天前 via iPhone
    @assiadamo 明天试试
    zhuzhibin
        8
    zhuzhibin  
    OP
       261 天前 via iPhone
    @mdn 这个我懂呀,这不是单独讨论这种入餐方式嘛 数组带下标的
    zhuzhibin
        9
    zhuzhibin  
    OP
       261 天前 via iPhone
    @Jiubia 看起来是反射?这么粗暴的吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2769 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:25 · PVG 13:25 · LAX 22:25 · JFK 01:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.