java中属性封装的声明式校验基于bean validation规范,通过@notblank、@notnull等注解直接标注字段,并借助spring-boot-starter-validation依赖实现自动校验。

Java 中在属性封装时使用注解实现声明式校验,核心是借助 Bean Validation(JSR 303/JSR 380) 规范,配合 Hibernate Validator 等实现,把校验逻辑从代码中剥离,直接写在实体类字段上。
引入标准校验依赖
确保项目包含 Bean Validation API 和具体实现(如 Hibernate Validator):
- Maven 中添加依赖(以 Spring Boot 2.5+ 或 Jakarta EE 9+ 为例):
该 starter 已内置 Jakarta 版本的 validation API(jakarta.validation.*),不再使用旧的 javax.validation.* 包。
在实体类字段上添加校验注解
将校验规则直接声明在封装的私有属性上,无需手写 if 判断。常用注解包括:
- @NotBlank:适用于 String,非 null 且去除首尾空格后长度 > 0
- @NotNull:非 null(基本类型包装类、对象都适用)
- @Min(1) / @Max(100):适用于数值类型(int、long、BigDecimal 等)
- @Email:校验字符串是否符合邮箱格式(简单正则,不保证真实可达)
- @Pattern(regexp = "^[a-zA-Z0-9_]{3,16}$"):自定义正则匹配
- @Size(min = 2, max = 20):适用于 String(长度)、Collection(元素个数)等
示例:
public class User {@NotBlank(message = "用户名不能为空")
private String username;
@Email(message = "邮箱格式不正确")
private String email;
@Min(value = 0, message = "年龄不能为负数")
private Integer age;
// getter/setter...
}
触发校验的方式
校验不会自动执行,需显式调用或由框架(如 Spring MVC)自动触发:
-
手动校验:注入
Validator,调用validate() -
Spring MVC 控制器中使用 @Valid 或 @Validated:
在方法参数前加@Valid,Spring 会自动校验并抛出MethodArgumentNotValidException;
配合@ExceptionHandler统一处理校验失败结果(如返回 JSON 错误信息) -
Service 层校验:可在 service 方法参数或对象上加
@Valid,配合@Validated支持分组校验
自定义校验注解(进阶)
当内置注解不够用时,可定义自己的约束注解:
- 编写一个注解接口(如
@Mobile),标注@Constraint(validatedBy = MobileValidator.class) - 实现
ConstraintValidator<mobile string></mobile>,重写isValid()方法 - 在实体字段上使用
@Mobile即可,和内置注解一样生效
这种方式保持了声明式风格,又扩展了业务语义,比如区分“注册手机号”和“登录手机号”的不同校验逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











