☰
@NotNull和@NotBlank和@NotEmpty的区别
2026/10/27 10:23:28 网站建设 项目流程

@NotNull只校验“不为 null”,允许空字符串"";@NotBlank专用于String,要求不为 null、不为"",且trim()后仍有内容。

核心区别对比

注解适用类型校验规则典型场景
@NotNull任意类型值不能为nullLong id、Integer age、对象引用
@NotEmptyString、集合、数组、Map不为null,且长度/大小 > 0List<String> roles、非空字符串
@NotBlank仅 String不为null,不为"",trim()后长度 > 0用户名、密码、备注等用户输入

严格程度:@NotBlank>@NotEmpty>@NotNull

不同输入值的校验结果

输入值@NotNull@NotEmpty@NotBlank
null❌❌❌
""✅❌❌
" "(纯空格)✅✅❌
"abc"✅✅✅

代码示例

publicclassUserRegisterRequest{@NotNull(message="用户ID不能为null")privateLongid;@NotEmpty(message="角色列表不能为空")privateList<String>roles;@NotBlank(message="用户名不能为空或纯空格")privateStringusername;@NotBlank(message="密码不能为空或纯空格")privateStringpassword;}

使用要点

  • 这些注解来自javax.validation.constraints或jakarta.validation.constraints包。
  • 必须配合@Valid或@Validated使用,否则不会生效。
  • 校验失败通常抛出MethodArgumentNotValidException,可配合@ControllerAdvice统一返回错误信息。
  • @NotBlank已经隐含了@NotNull和@NotEmpty的校验,所以字符串字段用@NotBlank就够了,不需要重复加。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询