今天在校验参数时候出现的问题,经过各种查,发现
@NotBlank
is new in Bean Validation 2.0 也就是说@NotBlank
是2.0的特性,所以先检查一下
(题外话:该jar包只提供接口,org.hibernate是实现类,不能少)
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
版本是不是2.0以上的,如果不是,先改成2.0以上的
然后Hibernate Validator version 版本应该是6.0以上的
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.14.Final</version>
</dependency>
注意,如果你引入了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
这个jar包会自动引入下面这个jar包
注意与上面那个groupId是不同的(一个是org.hibernate,另一个是org.hibernate.validator),我猜测jar包是完全相同的,所以这两个只需要一个就行,我的问题就是因为org.hibernate用的是5.2.4final版本的,web又引入了一个org.hibernate.validator 6.0.14.final版本的,所以冲突了
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.14.Final</version>
<scope>compile</scope>
</dependency>
参考这篇解决方案
贴一下完整的依赖
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!--增加Validation的依赖,这三个jar包都需要-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.14.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.1-b06</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.6</version>
</dependency>
贴一下自己用的校验bean工具类
// 分组校验
public static <T> void validateParam(T obj, Class... groups) {
Set<ConstraintViolation<T>> set = validator.validate(obj, groups);
if (set != null && set.size() > 0) {
StringBuffer stringBuffer = new StringBuffer();
Iterator<ConstraintViolation<T>> i = set.iterator();
while (i.hasNext()) {
ConstraintViolation<T> c = i.next();
stringBuffer.append("|").append(c.getPropertyPath()).append(":").append(c.getMessage());
}
LOGGER.error("####{}对象存在{}个参数异常,异常信息={}", obj.getClass().getSimpleName(), set.size(), stringBuffer.toString());
throw new BizException(ErrorCodeEnum.PARAM_ERROR);
}
}