Spring Boot 303参数校验与全局异常处理实战
2024-01-28 03:17:57
一、前言
在 Spring Boot 中,参数校验和全局异常处理是两个非常重要的功能。参数校验可以确保传入 API 的参数符合要求,从而避免不必要的错误发生。全局异常处理可以统一处理所有未捕获的异常,并提供友好的错误信息。
二、参数校验
Spring Boot 提供了多种方式来进行参数校验,其中最常用的方式是使用 JSR303 参数校验注解。JSR303 是一个用于 Java Bean 验证的规范,提供了多种常用的参数校验注解,例如 @NotNull、@Size 和 @Email 等。
为了使用 JSR303 参数校验注解,首先需要在项目中引入相应的依赖:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
然后,在需要进行参数校验的类中使用 JSR303 参数校验注解即可。例如,以下代码演示了如何使用 @NotNull 注解对一个参数进行非空校验:
@PostMapping("/user")
public User createUser(@RequestBody @Valid User user) {
return userService.createUser(user);
}
在上面的代码中,@Valid 注解表示需要对 User 对象进行参数校验。如果 User 对象中的任何一个属性不符合 JSR303 参数校验注解的约束,则会抛出 MethodArgumentNotValidException 异常。
三、全局异常处理
Spring Boot 提供了两种方式来实现全局异常处理:
- 使用 @ControllerAdvice 注解和 @ExceptionHandler 注解。
- 实现 ErrorController 接口。
以下代码演示了如何使用 @ControllerAdvice 注解和 @ExceptionHandler 注解实现全局异常处理:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
List<String> errors = new ArrayList<>();
for (FieldError error : ex.getBindingResult().getFieldErrors()) {
errors.add(error.getDefaultMessage());
}
return ResponseEntity.badRequest().body(errors);
}
}
在上面的代码中,@ControllerAdvice 注解表示这是一个全局异常处理类。@ExceptionHandler 注解表示该方法可以处理 MethodArgumentNotValidException 异常。
当 MethodArgumentNotValidException 异常发生时,Spring Boot 会自动调用 handleMethodArgumentNotValidException() 方法。该方法会将所有参数校验错误信息收集起来,并以 JSON 格式返回给客户端。
四、总结
Spring Boot 中的参数校验和全局异常处理非常重要,可以帮助我们提高代码的可读性和可维护性。通过使用 JSR303 参数校验注解和自定义 ExceptionHandler,可以轻松实现参数校验和全局异常处理。