Hibernate Validator 6.0.7.Final 之一(声明Bean约束之约束的继承性之一)

本文通过一个汽车租赁类的例子,展示了在Java中如何实现类之间的约束继承和累加效果,并通过单元测试验证了约束的有效性。

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

当一个类实现了某接口或者继承了某类的时候,父类型的约束将会被子类型继承。

  • 父类
public class Car {

    private String manufacture;

    private int seatCount;

    @NotNull(message = "制造商不能为空")
    public String getManufacture() {
        return manufacture;
    }

    public void setManufacture(String manufacture) {
        this.manufacture = manufacture;
    }

    @Min(value = 2, message = "座位数量不能小于2")
    public int getSeatCount() {
        return seatCount;
    }

    public void setSeatCount(int seatCount) {
        this.seatCount = seatCount;
    }
}
  • 子类
public class RentalCar extends Car {

    private String rentalStation;

    private int seatCount;

    @NotNull(message = "租赁站不能为空")
    public String getRentalStation() {
        return rentalStation;
    }

    public void setRentalStation(String rentalStation) {
        this.rentalStation = rentalStation;
    }

    @Max(value = 5, message = "座位数量不能大于5")
    @Override
    public int getSeatCount() {
        return seatCount;
    }

    @Override
    public void setSeatCount(int seatCount) {
        this.seatCount = seatCount;
    }
}
  • 测试
@Test
    public void inheritanceConstraintVer1Test() {
        RentalCar rentalCar = new RentalCar();
        // 违反了来自父类的约束
        rentalCar.setManufacture(null);
        rentalCar.setRentalStation(null);
        // 父类和子类的约束可以累加
        rentalCar.setSeatCount(1);

        Set<ConstraintViolation<RentalCar>> constraintViolations = validator.validate(rentalCar);
        logger.info("违反的约束的个数:{}", constraintViolations.size());
        for (ConstraintViolation<RentalCar> constraintViolation : constraintViolations) {
            logger.info("违反的约束:{}", constraintViolation.getMessage());
        }

        logger.info("---------------------------");

        // 父类和子类的约束可以累加
        rentalCar.setSeatCount(6);
        constraintViolations = validator.validate(rentalCar);
        logger.info("违反的约束的个数:{}", constraintViolations.size());
        for (ConstraintViolation<RentalCar> constraintViolation : constraintViolations) {
            logger.info("违反的约束:{}", constraintViolation.getMessage());
        }
    }
  • 查看
    这里写图片描述

知识点有2个:

  1. 子类型可以继承父类型定义的约束,比如例子中的manufacture的约束;
  2. 约束是累加生效的,比如例子中的seatCount的约束;

注意:本文使用的是property级别的约束,我们看到,打印的结果显示违反的约束的结果是3个;下一篇博客我们使用field级别的约束对比一下,发现违反的约束是4个。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杂货铺的小掌柜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值