首先,我们需要了解@RequestParam和@RequestBody的含义。
@RequestParam注解用于从前端传递过来的请求参数中获取单个或多个参数,一般用于GET请求。而@RequestBody注解则是从请求体中获取数据,一般用于POST请求。
下面我们来看一下@RequestParam和@RequestBody的使用对比:
1.使用@RequestParam
在使用@RequestParam注解的时候,我们需要注意以下几点:
1) 必须使用方法参数绑定指定参数名称,否则将会抛出 “MissingServletRequestParameterException” 异常,如下所示:
@GetMapping("/user")
public User getUser(@RequestParam String name, @RequestParam int age) {
User user = new User(name, age);
return user;
}
2) 如果请求参数是可选的,则可以通过required属性设置为false。
@GetMapping("/user")
public User getUser(@RequestParam(required = false) String name, @RequestParam(required = false) int age) {
User user = new User(name, age);
return user;
}
3) 如果传递的参数是一个数组或者List集合的话,那么我们可以使用@RequestParam注解的value属性来指定具体的参数名称,如下:
@GetMapping("/user")
public List<User> getUser(@RequestParam(value = "nameList") List<String> nameList) {
List<User> userList = new ArrayList<User>();
for(String name : nameList) {
userList.add(new User(name));
}
return userList;
}
2.使用@RequestBody
在使用@RequestBody注解的时候,我们需要注意以下几点:
1) 使用@RequestBody注解表示请求参数来自于请求体。
@PostMapping("/user")
public User createUser(@RequestBody User user) {
// code
}
2) 在使用@RequestBody注解时,我们需要注意使用POST请求,同时RequestBody参数为对象参数时,前台请求参数需以JSON格式传递。
{
"name": "张三",
"age": 18
}
3)@RequestBody注解也支持将请求体中的JSON数据绑定到Java对象中。
@PostMapping("/user")
public User createUser(@RequestBody String json) {
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
return user;
}
通过上面的示例,我们可以清楚的了解到@RequestParam和@RequestBody的使用对比及其区别。需要根据实际情况选择适合自己的注解进行使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于@RequestParam与@RequestBody使用对比 - Python技术站