Spring MVC @RequestParam 对象列表

Spring MVC @RequestParam a list of objects

我想创建一个页面,用户可以在其中看到用户列表,每个用户旁边都有复选框,用户可以单击这些复选框来删除它们。

在我使用 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;
    }

在 MVC 客户端中,url 将是:

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

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

但是如果您只传递应该有效的用户名 - 请参阅 how to capture multiple parameters using @RequestParam using spring mvc?

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

不过我觉得还是直接用request body来传递信息比较好。

Spring mvc 可以支持List<Object>Set<Object>Map<Object> 参数,但没有@RequestParam。

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

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

    // getter and setter
}

你想传递一个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

记得对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

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