Spring MVC @RequestParam一个对象列表

时间:2015-10-26 19:59:46

标签: spring rest 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;
    }

在MVC客户端中,网址为:

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

3 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

Spring mvc可以支持<a> <span class="sr-only">some text that relates to your link</span> <i class="icon"> </i> </a> List<Object>Set<Object>参数,但没有@RequestParam。

如果您的对象是Map<Object>,则以List<Object>为例,

User.java

您想要传递public class User { private String name; private int age; // getter and setter } 的参数,则可以使用这样的网址

List<User>

记住要对网址进行编码,编码后的网址是这样的:

http://127.0.0.1:8080/list?users[0].name=Alice&users[0].age=26&users[1].name=Bob&users[1].age=16

my github中显示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>的示例。