自动封装前端参数
除了用String类型或者基础数据类型接收参数,Spring MVC还可以帮我们使用集合框架或者自定义类自动封装前端的参数
参数封装为List
当同名的前端参数有多个时,可以使用一个List类,来作为请求接收方法的参数,参数名和请求中的参数名绑定,这样Spring MVC就会将这个参数封装成一个List类
@RestController
public class MyController {
@GetMapping(path = "/user")
public Map<String, Object> queryUser(@RequestParam String name, @RequestParam List<String> hobby) {
HashMap<String, Object> result = new HashMap<>();
result.put("name",name);
result.put("hobby", hobby);
return result;
}
}
测试结果如下

参数封装为Map
我们还可以使用一个Map类,作为请求方法的参数,添加上@RequestParam注解,这样Spring MVC会将所有的参数以键值对的形式全部封装在这个Map类中,这个Map类可以是<String, String>的泛型,也可以是<String, Object>的泛型
@RestController
public class MyController {
@GetMapping(path = "/user")
public Map<String, String> queryUser(@RequestParam Map<String, String> params) {
return params;
}
}
测试结果如下

Map类被称为“万能的Map”,在很多种请求参数的封装中都可以用这种数据类型,除此之外他还适用于以下情况
- 使用
@PathVariable注解获取路径参数 - 使用
@RequestBody注解获取请求体中的参数 - 使用
@RequestHeader注解获取请求头中的参数 - 作为方法参数将变量保存在request域中
参数封装为自定义类
Spring MVC还可以把前端参数封装成我们自定义的一个类
首先我们先定义一个自定义的Person类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private int age;
}
在请求处理方法中,将一个Person对象作为参数,注意这里不需要添加@RequestParam注解
@RestController
public class MyController {
@GetMapping(path = "/user")
public Person queryUser(Person person) {
return person;
}
}
然后我们将Person类的属性作为在请求中携带的参数,这样就可以将请求中的参数转换成Person对象的属性

这种封装方式同样适用于使用@RequestBody注解获取请求体中的参数的情况
本文介绍了Spring MVC如何自动封装前端参数,包括参数封装为List、Map以及自定义类。通过实例展示了如何利用List接收同名参数的集合,如何使用Map接收所有参数并保存键值对,以及如何将参数封装到自定义的Person类中。
1297

被折叠的 条评论
为什么被折叠?



