今天在校验参数时候出现的问题,经过各种查,发现
@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>
参考这篇解决方案
https://stackoverflow.com/questions/52878299/no-validator-could-be-found-for-constraint-javax-validation-constraints-notblan
贴一下完整的依赖
<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);
今天在校验参数时候出现的问题,经过各种查,发现@NotBlankis new in Bean Validation 2.0 也就是说@NotBlank是2.0的特性,所以先检查一下(题外话:该jar包只提供接口,org.hibernate是实现类,不能少) <dependency> <groupId>javax.va...
创建第一个Java project:Hellow World
显示Type name is not valid. The type name ‘Hello World’ is not a valid identifier,之后通过不断的搜索查找问题才发现,Hellow World这个名称中间有空格,一个合法的标识符中间是不能掺加空格的。
之后是发现代码块的上面部分出现一个叉号,里面写着:“Must declare a named
如下使用@NotBlank注解
@ApiModelProperty(value = "用户名", example = "用户名")
@NotBlank(message = "用户名为空")
private String userName;
代码未报错,但是运行报错,报错信息为:
hv000030: no validator could be found for constranit 'javax.validation.constraints.NotBlank' validating type 'ja
“HV000030: No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating type ‘java.math.BigDecimal’. Check configuration for ‘price’”
@NotEmpty 用在集合类上面
@NotBlank 用在Str...
No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating type ‘java.lang.Integer’. Check configuration for ‘state’
Not 注解
@NotNull
不能为 null,但可以为 empty,一般用在Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数
这个错误信息表示:在尝试对类型为 java.math.BigDecimal 的值进行验证时,没有找到符合 javax.validation.constraints.NotBlank 约束条件的验证器。请检查配置中 maxPosition 的设置。
NotBlank是hibernate-validator提供的注解,主要用于对字符串的非空校验,但是BigDecimal不是字符串类型,所以无法使用NotBlank来校验.
需要使用其他校验注解或者自定义校验逻辑