当前位置: 首页 > 工具软件 > validator.js > 使用案例 >

记Validator.validate造成的重大问题

孙子民
2023-12-01

问题场景: 类A继承类B,类A,B有相同的字段,并且都用了@NotBlank注解。在参数都设置正确的情况下,使用Validator.validate校验类A参数是否符合规则时,报错参数不符合规则

 

代码如下

//实体类
@Data
public class A extends B {

    @NotBlank
    private String name;

    private String score;

    @Valid
    private C c;
}

@Data
public class B {
    @NotBlank
    private String name;

    private String score;
}

@Data
public class C {
    @NotBlank
    private String age;

    private String sex;
}


//设置值
public .... pottBean(){
     A a=new A();
     a.setName("小明");

    check(a);
}

//校验方法
public .....check(Object obj){
    Validator validator =  Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(obj);
  //这个地方校验出来的,就是不符合规则的参数名,发现name也在其中,我也设置了值 ,百思不解
}

后来查找多方资料得知,Validator的验证组概念。

Bean Validation 规范中一个重要的概念,就是组和组序列。组定义了约束的子集。对于一个给定的 Object Graph 结构,有了组的概念,则无需对该 ObjectGraph 中所有的约束进行验证,只需要对该组定义的一个子集进行验证即可。完成组别验证需要在约束声明时进行组别的声明,否则使用默认的组 Default.class。组也有继承的属性。对某一组别进行约束验证的时候,也会对其所继承的基类进行验证。所以当我校验A参数时候,会对基类B进行校验

 

苦逼的我又一次栽在这个地方了,当需要校验实体类中的包含的对象时候,需要在该对象上添加@Valid注解 , 长点心吧

 

 类似资料: