Spring MVC @RequestParam一个对象列表

Kin*_*ere 3 rest spring spring-mvc http-post httprequest

我想创建一个页面,其中一个人看到一个用户列表,并且每个人旁边都有一个复选框,该人可以单击以删除它们.

在我使用REST API的MVC中,我想将一个User对象列表发送到REST API.

在可@RequestParam注解支持?

例如:

@RequestMapping(method = RequestMethod.DELETE, value = "/delete")
    public @ResponseBody Integer delete(
            @RequestParam("users") List<Users> list) {
        Integer deleteCount = 0;
        for (User u : list) {
            if (u != null) {
                repo.delete(u);
                ++deleteCount;
            }
        }
        return deleteCount;
    }
Run Code Online (Sandbox Code Playgroud)

在MVC客户端中,URL将是:

List list = new ArrayList<User>();
....
String url = "http://restapi/delete?users=" + list;
Run Code Online (Sandbox Code Playgroud)

Mat*_*nkt 9

请求参数是String到String的Multimap.您不能将复杂对象作为请求参数传递.

但是如果你只是传递应该工作的用户名 - 看看如何使用spring mvc使用@RequestParam捕获多个参数?

@RequestParam("users") List<String> list

但我认为最好只使用请求体来传递信息.


Fra*_*ang 5

Spring mvc 可以支持List<Object>,Set<Object>Map<Object>param,但不支持 @RequestParam。

List<Object>为例,如果你的目标是User.java,它是这样的:

public class User {
    private String name;
    private int age;

    // getter and setter
}
Run Code Online (Sandbox Code Playgroud)

并且你想传递一个参数List<User>,你可以像这样使用 url

http://127.0.0.1:8080/list?users[0].name=Alice&users[0].age=26&users[1].name=Bob&users[1].age=16
Run Code Online (Sandbox Code Playgroud)

记得对url进行编码,编码后的url是这样的:

http://127.0.0.1:8080/list?users%5B0%5D.name=Alice&users%5B0%5D.age=26&users%5B1%5D.name=Bob&users%5B1%5D.age=16
Run Code Online (Sandbox Code Playgroud)

的示例List<Object>Set<Object>Map<Object>显示在我的 github 中

  • 供其他像我一样困惑的人参考。使用“List&lt;User&gt;”作为控制器的参数将不起作用。相反,应该使用包含列表的包装类作为参数。检查 github 链接! (2认同)