@NotNull注解本身无运行时校验能力,需配合Hibernate Validator等框架及@Valid/@Validated显式触发校验,且仅判null不判空字符串或集合。

在 Java 中,@NotNull 注解本身**不具有运行时校验能力**,它只是一个标记,需配合校验框架(如 Hibernate Validator)和正确的调用方式才能真正生效。
1. 添加依赖(以 Maven 为例)
确保项目中引入了 Bean Validation API 和 Hibernate Validator 实现:
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
2. 在方法参数或字段上使用 @NotNull
注意:@NotNull 来自 jakarta.validation.constraints.NotNull(Jakarta EE 9+),不是旧的 javax.validation 包。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 用于方法参数(需配合
@Validated或@Valid):
public String processUser(@NotNull String username, @NotNull Integer age) {
return "Hello " + username;
}
- 用于实体类字段(常用于 DTO 或请求体):
public class UserRequest {
@NotNull(message = "用户名不能为空")
private String username;
@NotNull
private Integer age;
// getter/setter...
}
3. 启用运行时校验
仅加注解不会自动检查。必须显式触发校验:
立即学习“Java免费学习笔记(深入)”;
-
Spring MVC 控制器中:直接在参数前加
@Valid(或@Validated),Spring 会自动拦截并抛出MethodArgumentNotValidException:
@PostMapping("/user")
public ResponseEntity<String> createUser(@Valid @RequestBody UserRequest request) {
return ResponseEntity.ok("创建成功");
}
- 手动校验(非 Spring 环境或自定义逻辑):
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<UserRequest>> violations = validator.validate(request);
if (!violations.isEmpty()) {
String msg = violations.iterator().next().getMessage();
throw new IllegalArgumentException(msg);
}
4. 注意事项
-
@NotNull只判断是否为null,不判断空字符串("")或空集合;如需校验非空字符串,用@NotBlank;校验非空集合用@NotEmpty - Spring Boot 项目默认已集成 Hibernate Validator,无需额外配置即可使用
@Valid - 若使用 Lombok,
@Data或@Setter不会影响注解生效,但要确保字段上的@NotNull是加在属性上,而非 getter/setter - 自定义 message 时建议用国际化资源文件(如
ValidationMessages.properties)管理提示语

















