Hibernate Validator 第15篇:组约束-组继承

本文介绍了Hibernate Validator中如何利用组约束实现组继承。通过示例展示了如何定义SuperCar和RaceCarChecks组,其中RaceCarChecks继承自Default组。在验证过程中,未指定组时,默认校验发现车辆必须有座位;当指定RaceCarChecks组时,除了座位校验外,还发现赛车需配备安全带,从而揭示了组继承在数据校验中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用校验组的时候,我们需要调用validate()方法对于每一个校验的组,或者一个一个地指定他们。在有些情况下,你也许想定义一组约束,它包含另一组约束。你可以使用组继承实现它。

我们定义一个SuperCar和一个组RaceCarChecks,它继承自Default组。一个SuperCar必须系上安全带,才能参加比赛。

public class SuperCar extends Car {

    @AssertTrue(
            message = "Race car must have a safety belt",
            groups = RaceCarChecks.class
    )
    private boolean safetyBelt;

    // getters and setters ...

}

public interface RaceCarChecks extends Default {
}

在下面的例子中,我们检查是否SuperCar有座位没有安全带的车是一个无效的车。和是否它是一个无效的赛车。

// create a supercar and check that it's valid as a generic Car
SuperCar superCar = new SuperCar( "Morris", "DD-AB-123", 1  );
assertEquals( "must be greater than or equal to 2", validator.validate( superCar ).iterator().next().getMessage() );

// check that this supercar is valid as generic car and also as race car
Set<ConstraintViolation<SuperCar>> constraintViolations = validator.validate( superCar, RaceCarChecks.class );

assertThat( constraintViolations ).extracting( "message" ).containsOnly(
        "Race car must have a safety belt",
        "must be greater than or equal to 2"
);

第一次调用validate(),我们不指定一个组,因为一个car必须有至少一个作为,所以不存在错误。这个约束来自默认的组。

第二次调用,我们仅仅指定RaceCarChecks组,这儿有两个校验错误:

一个是关于来自Default组的丢失seat的错误;

另外一个是由于没有安全带,这个约束来自RaceCarChecks约束组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值