返回

前端参数校验神器:使用@Valid和@Validated,高效拦截异常!

后端

参数校验在 Spring Boot 中的应用

简介

在 Spring Boot 项目中,处理参数校验对于保持代码质量和应用程序健壮性至关重要。本文将深入探讨使用 @Valid 和 @Validated 注解以及 @ControllerAdvice 和 @ExceptionHandler 注解进行参数校验的强大功能。

@Valid 和 @Validated 注解

@Valid 注解用于校验单个参数,而 @Validated 注解则用于校验多个参数。两者都可与 @RequestBody 或 @RequestParam 注解结合使用,用于校验 HTTP 请求中的 JSON 数据或表单数据。

使用 @Valid 和 @Validated 进行参数校验

要使用 @Valid 和 @Validated 进行参数校验,请执行以下步骤:

  1. 导入必要的依赖项:org.springframework.validation
  2. 定义校验规则,例如使用 JSR-303 或 Hibernate Validator 注释
  3. 在需要校验参数的方法上添加 @Valid 或 @Validated 注解
  4. 处理校验结果

@ControllerAdvice 和 @ExceptionHandler

@ControllerAdvice 和 @ExceptionHandler 注解可用于拦截和处理参数校验异常。

@ControllerAdvice 注解将类标记为一个全局异常处理器。

@ExceptionHandler 注解用于定义特定类型的异常处理程序。例如,可以定义一个处理 ValidationException 异常的处理程序。

示例代码

下面的示例展示了如何使用 @Valid 和 @ControllerAdvice 进行参数校验:

UserController.java

@RestController
public class UserController {
    @PostMapping("/user")
    public User createUser(@RequestBody @Valid User user) {
        // 省略其他代码
    }
}

GlobalExceptionHandler.java

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ValidationException.class)
    public ResponseEntity<Object> handleValidationException(ValidationException ex) {
        // 省略其他代码
    }
}

结论

使用 @Valid 和 @Validated 注解进行参数校验以及 @ControllerAdvice 和 @ExceptionHandler 进行异常拦截,可以显著提升 Spring Boot 项目的代码质量和可维护性。这种方法确保了在应用程序级别实施参数校验,从而避免了无效数据进入系统。

常见问题解答

  1. @Valid 和 @Validated 注解的区别是什么?
    • @Valid 用于校验单个参数,而 @Validated 用于校验多个参数。
  2. 如何定义校验规则?
    • 可以使用 JSR-303 或 Hibernate Validator 等注释框架来定义校验规则。
  3. 如何处理校验结果?
    • 使用 @ExceptionHandler 注解拦截和处理 ValidationException 异常。
  4. @ControllerAdvice 注解有什么作用?
    • @ControllerAdvice 注解将类标记为一个全局异常处理器。
  5. 如何在 Spring Boot 中使用 @ControllerAdvice 和 @ExceptionHandler?
    • 定义一个 @ControllerAdvice 类并使用 @ExceptionHandler 注解定义特定异常的处理程序。