Spring MVC @RequestParam对象列表

cu6pst1q  于 2023-01-26  发布在  Spring
关注(0)|答案(3)|浏览(167)

我想创建一个页面,用户可以在其中看到用户列表,并且每个用户旁边都有复选框,用户可以单击这些复选框将其删除。
在使用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;
zu0ti5jz

zu0ti5jz1#

请求参数是字符串到字符串的多Map。不能将复杂对象作为请求参数传递。
但如果您只传递用户名,则应该可以工作-请参见how to capture multiple parameters using @RequestParam using spring mvc?
@RequestParam("users") List<String> list
但我认为只使用请求体来传递信息会更好。

8ljdwjyq

8ljdwjyq2#

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中。

14ifxucb

14ifxucb3#

提醒一下,任何自定义对象的List都可能需要注册自定义转换器,例如:

@Bean
public Converter<String, CustomObject> stringToCustomObjectConverter() {
    return new Converter<>() {
        @Override
        public CustomObject convert(String str) {
            return new ObjectMapper().readValue(str, CustomObject.class);
        }
    };
}

@Bean
public Converter<String, List<CustomObject>> stringToListCustomObjectConverter() {
    return new Converter<>() {
        @Override
        public List<CustomObject> convert(String str) {
            return new ObjectMapper().readValue(str, new TypeReference<>() {
            });
        }
    };
}

因此,您可以涵盖以下自定义案例:

/api/some-api?custom={"name":"Bla 1","age":20}
 /api/some-api?custom={"name":"Bla 1","age":20}&custom={"name":"Bla 2","age":30}
 /api/some-api?custom=[{"name":"Bla 1","age":20},{"name":"Bla 2","age":30}]

其中:@RequestParam(“自定义”)列出自定义对象

相关问题