记Validator.validate造成的重大问题

问题场景: 类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注解 , 长点心吧

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值