在构建安全且可靠的应用程序时,验证用户输入是至关重要的一环。Spring Boot 通过集成 Hibernate Validator(即 JSR 380 Bean Validation API 的参考实现)让这一过程变得非常简单。利用它,我们开发者可以使用诸如 @NotNull、@Size、@Email 等简单的注解,在数据模型上强制执行验证规则。
在本文中,我们将共同探讨如何实现以下目标:
- 使用常见的验证注解。
- 在实体类中应用这些注解。
- 优雅地处理验证错误。
- 暴露一个能自动验证输入的 REST API。
常见的 Hibernate Validator 注解
Hibernate Validator 提供了以下对软件开发非常有帮助的注解。
- @NotNull: @NotNull 确保字段不能为 null,但允许空值(例如空字符串或空集合)。
- @NotEmpty: @NotEmpty 确保字段不为 null 且也不为空,这意味着它必须至少包含一个元素(针对集合)或至少一个字符(针对字符串)。
- @NotBlank: @NotBlank 仅适用于字符串,确保它们不为 null、不为空,并且至少包含一个非空白字符(即仅包含空格是不允许的)。
- @Min: 必须满足给定的最小值限制。
- @Max: 必须满足给定的最大值限制。
- @Size: 字段大小必须在指定的长度限制范围内(小于或大于指定的字段大小)。
- @Email: 可以使用此注解来验证电子邮件格式。
- @Pattern: 必须满足给定的正则表达式模式。
分步实现指南
步骤 1:创建项目
请使用 Spring Initializr(或者你 IDE 的向导):
- Project: Maven
- Language: Java
- Spring Boot: 3.x
- Dependencies: Spring Web, Validation (spring-boot-starter-validation), Lombok (可选但很实用)
> 建议使用 Java 17+ 版本来配合 Spring Boot 3.x。
步骤 2:项目结构(极简版)
!项目结构
步骤 3:创建实体类
让我们创建一个实体类 GeekEmployee ,并在其字段上应用验证注解。
GeekEmployee.java
Java
CODEBLOCK_efc57a82
步骤 4:处理验证器异常
当验证失败时,Spring Boot 会抛出 MethodArgumentNotValidException。我们可以使用 @ControllerAdvice 全局处理此异常,并返回结构化的错误响应。
GlobalExceptionHandler.java:
Java
CODEBLOCK_320cce2b
现在,让我们尝试通过接受诸如 "geekEmployeeName"、"salary"、"geekEmailId" 和 "qualifications" 等输入来保存这些员工数据。我们需要一个 REST 控制器…