在Spring中,如何将整数列表绑定到RequestParam?

Jam*_*mes 8 spring http-request-parameters

我有来自客户端的参数,例如

ids[] = 11
ids[] = 12
ids[] = 21
Run Code Online (Sandbox Code Playgroud)

在服务器端,我有一个Spring控制器,使用以下方法:

@RequestMapping("/delete.x")
public @ResponseBody Map<String, Object> delete(HttpServletRequest request, @RequestParam("ids[]") List<Integer> ids) {
Run Code Online (Sandbox Code Playgroud)

当我尝试迭代id的集合时,如下所示:

for (Integer id : ids) {
Run Code Online (Sandbox Code Playgroud)

我得到如下例外:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

Spring是否将ID的类型更改为List <String>?无论我想如何,我如何避免这个问题并将ID作为整数存储在List中?

JoG*_*JoG 13

你面临的问题是java有类型擦除.所以在运行时a List<Integer>等于a,List<String>而spring无法知道你想要Integers进入你的列表.

解决方法可能是使用整数数组而不是整数列表.

@RequestMapping("/delete.x")
public @ResponseBody Map<String, Object> delete(HttpServletRequest request,
  @RequestParam("ids[]") Integer[] ids) {
Run Code Online (Sandbox Code Playgroud)