SpringBoot自定义校验与javax.validation注解均不生效如何解决
问题根因及解决方法
1. 缺失校验实现依赖
你当前pom.xml中仅引入了校验接口包javax.validation:validation-api,没有对应的实现包。Spring Boot 2.3及以上版本中,spring-boot-starter-web不再默认集成校验组件,需要手动引入完整的校验启动器:
把pom中现有的javax.validation:validation-api依赖替换为:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
这个启动器已经包含了校验API和Hibernate Validator实现,无需单独引入validation-api包。
2. 自定义校验逻辑写反
你当前CapacityValidator的isValid方法逻辑错误:校验方法返回true代表校验通过,你现有逻辑是当传入值大于9999时返回true,完全不符合需求。同时要补充空值判断避免空指针:
@Override public boolean isValid(Float value, ConstraintValidatorContext constraintValidatorContext) { // 空值默认放行,如果需要非空可搭配@NotNull注解使用 if (value == null) { return true; } return value <= MAX_CAPACITY_VALUE; }
3. 确认注解包路径正确
检查控制器类上的@Validated注解导入的是org.springframework.validation.annotation.Validated,不要导错其他包下的同名注解。
以上修改完成后重启项目,所有javax.validation标准注解和你自定义的@Capacity注解都会正常触发校验。
内容的提问来源于stack exchange,提问作者Paweł Bocian
相关产品推荐
相关产品推荐

