当前位置 博文首页 > blackball1998的博客:自动封装前端参数
除了用String类型或者基础数据类型接收参数,Spring MVC还可以帮我们使用集合框架或者自定义类自动封装前端的参数
当同名的前端参数有多个时,可以使用一个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类,作为请求方法的参数,添加上@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
注解获取请求头中的参数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
注解获取请求体中的参数的情况