目录
一、@RequestParam
二、@RequestBody
三、@PathVariable
四、@RequestHeader
五、@RequestAttribute
六、@RequestPart
七、@Valid
一、@RequestParam
1.作用
- 用于将请求中的 查询参数 或 表单参数 绑定到方法的参数上。
- 支持 GET 和 POST 请求。
2.使用方法
@GetMapping("/search")
public ResponseEntity<List<Item>> searchItems(@RequestParam(value = "keyword", required = false) String keyword,@RequestParam(value = "page", defaultValue = "1") int page) {// 业务逻辑
}
3.属性说明
value
或name
:参数名,对应请求中的参数键名,变量名与参数名相同时可省略。required
:是否为必需参数,默认值为true
。如果设置为false
,当参数缺失时,方法不会报错。defaultValue
:参数的默认值,当请求中未包含该参数时使用。
二、@RequestBody
1.作用
-
用于将请求体中的 JSON 数据 绑定到方法的参数上。
-
常用于处理 POST、PUT、PATCH 请求。
2.使用方法
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {// 业务逻辑
}
3.属性说明
required
:是否为必需参数,默认值为true
。如果设置为false
,当请求体为空时,参数值为null
。
三、@PathVariable
1.作用
- 用于将 URL 路径中的变量 绑定到方法的参数上。
- 常用于 RESTful 风格的接口。
2.使用方法
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable("id") Long id) {// 业务逻辑
}
3.属性说明
value
或name
:路径变量的名称,对应{}
中的变量名。required
:是否为必需参数,默认值为true
。
四、@RequestHeader
1.作用
- 用于将 请求头信息 绑定到方法的参数上。
2.使用方法
@GetMapping("/profile")
public ResponseEntity<User> getProfile(@RequestHeader("Authorization") String token) {// 业务逻辑
}
3.属性说明
value
或name
:请求头的名称。required
:是否为必需参数,默认值为true
。defaultValue
:当请求头缺失时的默认值。
五、@RequestAttribute
1.作用
- 用于将 请求范围内的属性 绑定到方法的参数上。
- 这些属性通常由拦截器或过滤器预先设置。
2.使用方法
@GetMapping("/order")
public ResponseEntity<Order> getOrder(@RequestAttribute("userId") Long userId) {// 业务逻辑
}
3.属性说明
value
或name
:属性的名称。required
:是否为必需参数,默认值为true
。
4.示例
拦截器设置:
public class AuthInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {Long userId = // 从请求中解析用户IDrequest.setAttribute("userId", userId);return true;}
}
六、@RequestPart
1.作用
- 用于接收
multipart/form-data
请求中的特定部分,常用于文件上传。 - 与
@RequestParam
不同,@RequestPart
支持解析复杂的对象和文件。
2.使用方法
@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestPart("file") MultipartFile file,@RequestPart("description") String description) {// 业务逻辑
}
3.属性说明
value
或name
:请求部分的名称。required
:是否为必需参数,默认值为true
。
七、@Valid
1.简介
作用:用于触发对参数对象的验证。
使用场景:与参数对象(如实体类、DTO)配合使用。
常用的验证注解包括:
@NotNull
:字段不能为空@NotEmpty
:集合、字符串等不能为空@NotBlank
:字符串不能为空白字符@Size
:指定集合、数组、字符串的长度范围@Min
、@Max
:指定数值的最小值和最大值@Email
:邮箱格式验证@Pattern
:正则表达式匹配
2.使用方法
public class UserDTO {@NotBlank(message = "用户名不能为空")private String username;@Email(message = "邮箱格式不正确")private String email;@Size(min = 6, max = 20, message = "密码长度必须在6到20位之间")private String password;// Getters and Setters
}
@PostMapping("/register")
public ResponseEntity<?> register(@Valid @RequestBody UserDTO userDTO, BindingResult result) {if (result.hasErrors()) {// 处理验证错误String errorMessage = result.getAllErrors().get(0).getDefaultMessage();return ResponseEntity.badRequest().body(errorMessage);}// 业务逻辑
}
3.异常处理
BindingResult
接口:
- 用于获取验证结果,必须紧跟在被
@Valid
注解的参数后面。 - 可用于判断验证是否通过,获取错误信息。
全局异常处理:
可以使用 @ControllerAdvice
和 @ExceptionHandler
注解,统一处理验证异常。
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<?> handleValidationException(MethodArgumentNotValidException ex) {String errorMessage = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();return ResponseEntity.badRequest().body(errorMessage);}
}