@notblank用于校验string类型字段或参数,确保其不为null、不为空串、且去除首尾空格后长度大于0;需引入spring-boot-starter-validation依赖;区别于@notnull(仅防null)和@notempty(不防纯空白),内部调用string==null||string.trim().isempty()。

在 Java 中,@NotBlank 是 Hibernate Validator 提供的校验注解,用于确保字符串**不为 null、不为空串、且至少包含一个非空白字符**(即去除首尾空格后长度 > 0)。它比 @NotNull 更严格,也比 @NotEmpty 多一层“非纯空白”的判断。
需要引入依赖
如果你用的是 Spring Boot 2.3+,默认已移除 javax.validation 依赖,需手动添加:
- Maven(Spring Boot 3.x 推荐 jakarta):
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-validation</artifactid></dependency>
该 starter 已包含 jakarta.validation(新命名空间)和 hibernate-validator 实现。
基本用法:加在字段或参数上
只能用于 String 类型字段或方法参数,对其他类型无效(会忽略或报错)。
- 实体类字段校验:
public class User {
@NotBlank(message = "用户名不能为空,也不能只输入空格")
private String username;
// getter / setter
}
- Controller 方法参数校验(需配合
@Valid或@Validated):
@PostMapping("/users")
public ResponseEntity> createUser(@Valid @RequestBody User user) {
// ...
}
此时若 username = " " 或 null 或 "",校验失败,抛出 MethodArgumentNotValidException。
注意与 @NotEmpty、@NotNull 的区别
-
@NotNull:只防null,接受""和" " -
@NotEmpty:防null和"",但**不防纯空白字符串**(如" \t\n"会通过) -
@NotBlank:防null、""、" \t\n"—— 内部调用string == null || string.trim().isEmpty()
自定义错误消息和分组校验
支持 message 属性和 validation groups:
public interface Create {}
public interface Update {}
public class User {
@NotBlank(groups = {Create.class}, message = "创建时用户名必填")
@NotBlank(groups = {Update.class}, message = "更新时用户名不能空白")
private String username;
}
// Controller 中指定分组
@PostMapping("/users")
public void create(@Validated(Create.class) @RequestBody User user) { ... }
@PutMapping("/users/{id}")
public void update(@Validated(Update.class) @RequestBody User user) { ... }Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











