
在 spring boot 3.x(基于 jakarta ee 9+)中,`@notblank` 不再位于 `javax.validation` 包下,而应从 `jakarta.validation.constraints` 导入;仅添加 `spring-boot-starter-validation` 依赖是不够的,还需确保使用正确的包路径。
Spring Boot 自 3.0.0 版本起全面迁移到 Jakarta EE 9+ 规范,这意味着所有 Java EE 相关的验证注解(如 @NotBlank、@NotNull、@Size 等)已从旧的 javax.validation.* 包迁移至新的 jakarta.validation.* 包。这是 Jakarta EE 项目在 Oracle 将 Java EE 移交后统一命名空间的重要变更,并非 Bug,而是强制性规范升级。
✅ 正确做法(推荐适配 Spring Boot 3.x):
在你的实体类中,替换导入语句为:
import jakarta.validation.constraints.NotBlank;
并确保 pom.xml 中已声明 spring-boot-starter-validation(你已正确添加,无需改动):
org.springframework.boot spring-boot-starter-validation
? 注意:spring-boot-starter-validation 在 Spring Boot 3.x 中默认引入的是 jakarta.validation:jakarta.validation-api(而非旧版 javax.validation:validation-api),因此必须使用 jakarta.* 包路径,否则编译报错:Cannot resolve symbol NotBlank。
? 修改后的 Person 类示例:
package com.example.demo.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank; // ✅ 关键:使用 jakarta 而非 javax
import java.util.UUID;
public class Person {
private final UUID id;
@NotBlank(message = "Name must not be blank") // 可选:添加自定义提示
private final String name;
public Person(@JsonProperty("id") UUID id,
@JsonProperty("name") String name) {
this.id = id;
this.name = name;
}
public UUID getId() {
return id;
}
public String getName() {
return name;
}
}⚠️ 重要提醒:
- 若你误写为 import javax.validation.constraints.NotBlank;,即使依赖存在,IDE 和编译器仍会报错——因为该类在 Jakarta EE 9+ 中已彻底移除。
- Spring Boot 2.x(如 2.7.8)仍使用 javax.validation,但不建议降级以兼容旧包名,除非有强约束无法升级 JDK 或依赖;Spring Boot 3.x 要求 JDK 17+,且长期维护和新特性支持更优。
- 如需启用校验生效(例如在 REST Controller 中自动触发),需在对应方法参数上添加 @Valid:
@PostMapping("/persons")
public ResponseEntity> createPerson(@Valid @RequestBody Person person) {
// 处理逻辑
}✅ 总结:
| 项目 | Spring Boot 2.x | Spring Boot 3.x |
|------|------------------|------------------|
| Java 版本 | ≥ 8(推荐 11) | ≥ 17(强制) |
| 验证 API 包名 | javax.validation.* | jakarta.validation.* |
| Starter 依赖 | spring-boot-starter-validation(含 javax.validation-api) | spring-boot-starter-validation(含 jakarta.validation-api) |
| 推荐做法 | 保持 javax 导入 | 必须改用 jakarta 导入 |
遵循以上配置,即可在 Spring Boot 3.0.2 项目中成功使用 @NotBlank 进行 Bean 校验。










