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

2023-08-09 10:52:29 +08:00
 zhuzhibin

背景:

最近有些项目的接口往 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 的问题

911 次点击
所在节点    问与答
9 条回复
zhuzhibin
2023-08-09 10:55:18 +08:00
查了 ChatGPT 很多都不行。。例如说用 @RequestParam("id[]") String[] id 的方式来接之类的,都不行,在不让前端调整的情况下,一开始想直接切换 post 。。。但是想了想,遵循 restful api 风格就暂时用 Map(String,String) params 的办法来接了。。我太菜了
6IbA2bj5ip3tK49j
2023-08-09 10:58:16 +08:00
让前端改成 /api/query?id=1&id=2&id=3 ,后端就能用数组/列表拿到了。
或者拿 servlet request 一把梭
zhuzhibin
2023-08-09 12:27:54 +08:00
@xgfan 单纯讨论这个问题,你说的我都懂
Jiubia
2023-08-09 14:48:40 +08:00
HandlerMethodArgumentResolver 应该可以解决你的问题
mdn
2023-08-09 14:54:36 +08:00
传 string, url?ids=1,2,3,4,5,6,7 后端在分割成数组
assiadamo
2023-08-09 14:55:24 +08:00
用 Map<String, String[]>类型试试
zhuzhibin
2023-08-09 21:30:59 +08:00
@assiadamo 明天试试
zhuzhibin
2023-08-09 21:31:52 +08:00
@mdn 这个我懂呀,这不是单独讨论这种入餐方式嘛 数组带下标的
zhuzhibin
2023-08-09 21:32:13 +08:00
@Jiubia 看起来是反射?这么粗暴的吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/963660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX