‘javax.validation.constraints.NotBlank‘ validating type ‘java.lang.String‘

今天在校验参数时候出现的问题,经过各种查,发现

@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);
        }
    }

 

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值