1. 程式人生 > >Hibernate Validator 6.0.7.Final 之一(宣告Bean約束之約束的繼承性之二)

Hibernate Validator 6.0.7.Final 之一(宣告Bean約束之約束的繼承性之二)

承接Hibernate Validator 6.0.7.Final 之一(宣告Bean約束之約束的繼承性之一)。本文使用field級別的約束來測試一下約束的繼承性。

  • 父類
public class Car {

    @NotNull(message = "製造商不能為空")
    private String manufacture;

    @Min(value = 2, message = "座位數量不能小於2")
    private int seatCount;

    public String getManufacture() {
        return
manufacture; } public void setManufacture(String manufacture) { this.manufacture = manufacture; } public int getSeatCount() { return seatCount; } public void setSeatCount(int seatCount) { this.seatCount = seatCount; } }
  • 子類
public class
RentalCar extends Car {
@NotNull(message = "租賃站不能為空") private String rentalStation; @Max(value = 5, message = "座位數量不能大於5") private int seatCount; public String getRentalStation() { return rentalStation; } public void setRentalStation(String rentalStation) { this
.rentalStation = rentalStation; } @Override public int getSeatCount() { return seatCount; } @Override public void setSeatCount(int seatCount) { this.seatCount = seatCount; } }
  • 測試
    @Test
    public void inheritanceConstraintVer2Test() {
        com.qs.mmeng.hibernate.validator.constraints.declare.inheritance.ver2.RentalCar rentalCar =
                new com.qs.mmeng.hibernate.validator.constraints.declare.inheritance.ver2.RentalCar();
        // 違反了來自父類的約束
        rentalCar.setManufacture(null);
        rentalCar.setRentalStation(null);
        // 父類和子類的約束可以累加
        rentalCar.setSeatCount(6);
        Set<ConstraintViolation<com.qs.mmeng.hibernate.validator.constraints.declare.inheritance.ver2.RentalCar>> constraintViolations =
                validator.validate(rentalCar);
        logger.info("違反的約束的個數:{}", constraintViolations.size());
        for (ConstraintViolation<com.qs.mmeng.hibernate.validator.constraints.declare.inheritance.ver2.RentalCar> constraintViolation : constraintViolations) {
            logger.info("違反的約束:{}", constraintViolation.getMessage());
        }
    }
  • 檢視
    這裡寫圖片描述

注意,從列印的結果可以看到使用field級別的約束的時候,違反的約束的個數是4。