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

@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是实现类,不能少)        &lt;dependency&gt;            &lt;groupId&gt;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 typejava.math.BigDecimal’. Check configuration for ‘price’” @NotEmpty 用在集合类上面 @NotBlank 用在Str...
No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating typejava.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来校验. 需要使用其他校验注解或者自定义校验逻辑