@notnull仅校验null值,不校验空字符串或空白字符;需引入jakarta.validation-api和hibernate-validator依赖,标注在包装类型字段上,并通过@valid显式触发校验。

@NotNull 是 Jakarta Bean Validation(原 Hibernate Validator)中用于校验对象属性是否为 null 的注解,它**只校验 null 值,不校验空字符串、空集合或空白字符等**。要让它生效,需满足几个前提条件并配合正确使用方式。
确保依赖和环境支持
项目中必须引入 Bean Validation API 和实现(如 Hibernate Validator):
- Maven 中添加:
jakarta.validation:jakarta.validation-api(API) +org.hibernate.validator:hibernate-validator(实现) - Spring Boot 2.3+ 默认已包含,但需确认未排除 validation starter
- 非 Spring 环境需手动创建
Validator实例进行校验
在实体类中正确标注属性
将 @NotNull 直接加在需要非空校验的字段上(支持基本类型包装类、String、自定义对象等):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public class User {
@NotNull(message = "用户ID不能为空")
private Long id;
@NotNull(message = "用户名不能为空")
private String name;
// 注意:@NotNull 对 int/long 等基本类型无效(它们不能为 null)
}
⚠️ 注意:int、long、boolean 等基本类型无法为 null,加 @NotNull 没有意义且会报错;应改用其包装类型(Integer, Long, Boolean)。
触发校验的常见方式
校验不会自动发生,需显式调用:
-
Spring MVC 控制器中:在参数前加
@Valid或@Validated,配合@NotNull即可触发自动校验 -
手动校验:通过
Validator.validate(object)调用,检查返回的Set<constraintviolation>></constraintviolation> -
Service 层校验:推荐在方法参数或入参对象上使用
@Valid,由 Spring AOP 自动拦截处理
区分 @NotNull 和其他空值校验注解
避免误用,明确各注解职责:
-
@NotNull → 只判断是否为
null - @NotBlank → 仅适用于 String,要求不为 null、不为空白(trim 后长度 > 0)
- @NotEmpty → 适用于 String、Collection、Map、Array,要求不为 null 且 size > 0
- 若需同时校验 null 和空字符串,应组合使用:
@NotNull @NotBlank










