繁体   English   中英

Spring MVC @RequestParam一个对象列表

[英]Spring MVC @RequestParam a list of objects

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

在我的MVC中使用REST API,我想将一个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到String的Multimap。 您不能将复杂对象作为请求参数传递。

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

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

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

虽然这个问题已得到解答并且答案已被接受,但我发现使用@RequestBody代替@RequestParam完全符合您的要求,而且非常简单。

你最终会得到@RequestBody List<Integer> list 您可以通过HTTP请求调用您的Web服务( POST肯定会工作,但DELETE应该也可以),请求正文: [id1, id2, ...] 如果它没有开箱即用,请尝试将consumes = MediaType.APPLICATION_JSON_VALUE)添加到@RequestMapping

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>示例显示在我的github中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM