在Spring MVC环境中,对于各种HTTP请求方式(GET、POST、PUT、DELETE等),后端Controller在接收参数时可以使用相应的注解来简化参数绑定和验证。
GET 请求
@RequestParam
@GetMapping("/users")
public List<User> getUsers(@RequestParam(name = "name", required = false) String name) {
// ...
}
作用:用于将请求参数(query string)绑定到方法参数。例如,请求 /users?name=John 时,getUsers 方法的 name 参数会被赋值为 "John"。 原因: 自动绑定:注解自动将请求中的同名参数值绑定到方法参数,无需手动解析请求。 参数校验:可以通过 required 属性指定参数是否必须存在,还可以配合Spring Validation框架进行更复杂的参数校验。 默认值:可以指定默认值,当请求中未提供该参数时使用。
@PathVariable
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long userId) {
// ...
}
作用:用于将请求路径中的占位符变量绑定到方法参数。例如,请求 /users/123 时,getUserById 方法的 userId 参数会被赋值为 123L。 原因: 路径参数提取:注解自动从请求路径中提取指定名称的变量,无需手动解析路径。 类型转换:支持自动类型转换,如将字符串形式的路径变量转换为所需的类型(如Long、Integer等)。
POST、PUT、PATCH 请求
@RequestBody
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// ...
}
作用:用于将请求体(通常是JSON或XML格式)反序列化为指定类型的对象,并绑定到方法参数。例如,对于一个JSON格式的POST请求,其内容会被解析为 User 对象。 原因: 内容解析:注解自动处理请求体的解析工作,将JSON/XML数据转化为Java对象,便于后续处理。 复杂数据结构:适用于接收复杂、嵌套的数据结构,如对象、数组、列表等。 类型安全:直接操作Java对象,避免手动解析字符串,提高了代码的类型安全性。
@ModelAttribute
@PostMapping("/users")
public User updateUser(@ModelAttribute User user) {
// ...
}
作用:类似于 @RequestBody,用于将请求体数据绑定到方法参数,但通常用于表单提交场景。它可以结合Spring的HttpMessageConverter自动将请求体或请求参数转换为对象。 原因: 表单提交支持:适用于处理传统的HTML表单提交,或者使用 application/x-www-form-urlencoded 编码的请求。 数据绑定:不仅可以处理请求体数据,还能结合其他注解(如 @RequestParam、@RequestHeader)将请求的不同部分绑定到同一个对象。
DELETE 请求
DELETE请求通常与 @PathVariable 或 @RequestParam 结合使用,因为DELETE请求通常不携带请求体。示例已在前文给出。