javax.validation.constraints.NotBlank导入报无法解析符号validation问题
问题描述
Spring Boot项目开发中需使用@NotBlank参数校验注解,添加javax.validation相关依赖后,javax.validation.constraints.NotBlank导入语句无法识别,IDE报错:Cannot resolve symbol 'validation'(无法解析符号'validation')。
现有配置
pom.xml 依赖片段
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency>
实体类代码
package com.educative.ecommerce.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.validation.constraints.NotBlank; @Entity @Table(name = "categories") public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "category_name") private @NotBlank String categoryName; private @NotBlank String description; private @NotBlank String imageUrl; }
问题根因
- Spring Boot 2.3.x及以上版本,已将Bean Validation相关依赖从
spring-boot-starter-web中默认移除,不会自动引入校验相关组件。 - 单独引入
javax.validation:validation-api仅包含校验注解的接口定义,缺少对应的实现包,且未通过Spring Boot官方依赖管理机制管控的话,容易出现版本不匹配、依赖无法正常拉取识别的问题。
修复步骤
- 删除pom.xml中单独引入的
javax.validation:validation-api依赖。 - 替换引入Spring Boot官方提供的validation starter,该依赖会自动关联匹配当前Spring Boot版本的校验API、hibernate-validator实现,项目如果继承了
spring-boot-starter-parent无需手动指定版本,未继承的话补充和当前Spring Boot一致的版本号即可:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
- 保存pom.xml后,执行IDE的Maven依赖刷新操作:IDEA点击右侧Maven面板的刷新按钮,Eclipse右键项目选择
Maven -> Update Project,强制拉取更新依赖。 - 若使用Spring Boot 3.x及以上版本,javax命名空间已全部迁移至jakarta,需将所有
javax.validation开头的导入替换为jakarta.validation开头,即@NotBlank的导入路径改为import jakarta.validation.constraints.NotBlank;。
额外注意
现有实体类中@GeneratedValue(strategy = GenerationType.IDENTITY)使用的GenerationType类未显式导入,依赖问题修复后需补充对应导入语句(Spring Boot 2.x导入javax.persistence.GenerationType,3.x导入jakarta.persistence.GenerationType),避免出现新的编译错误。
内容的提问来源于stack exchange,提问作者Law
相关产品推荐
相关产品推荐

