Hibernate Validator 6.0.7.Final 之一(声明Bean约束之class级别的约束)

本文介绍了一种使用类级别约束来确保对象多个属性间相关性的方法,例如确保乘客数不超过座位数。

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

field级别的约束property级别的约束都是针对单个属性的,而类级别的属性则是针对整个对象的,这在一个对象的多个属性之间具有相关性的情况下是非常有用的。

  • 对于下面这个类,我们应该确保乘客的数量不能多于座位的数量,也就是属性seatCount和passengers之间具有相关性,此时,class级别的约束就有了用武之地
@ValidPassengerCount
public class Car {

    private int seatCount;

    private List<Person> passengers;

    public int getSeatCount() {
        return seatCount;
    }

    public void setSeatCount(int seatCount) {
        this.seatCount = seatCount;
    }

    public List<Person> getPassengers() {
        return passengers;
    }

    public void setPassengers(List<Person> passengers) {
        this.passengers = passengers;
    }
}
  • 我们注意到了,在Car类上,我们使用了class级别的约束@ValidPassengerCount,这个约束是用来校验乘客数量不能超过座位数量的,具体实现如下:
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = {ValidPassengerCountValidator.class})
@Documented
public @interface ValidPassengerCount {

    String message() default "乘客数量不能超过座位数量";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
public class ValidPassengerCountValidator implements ConstraintValidator<ValidPassengerCount, Car> {

    @Override
    public void initialize(ValidPassengerCount constraintAnnotation) {

    }

    @Override
    public boolean isValid(Car car, ConstraintValidatorContext context) {
        if (car == null) {
            return true;
        }
        return car.getPassengers().size() <= car.getSeatCount();
    }
}

怎样实现自定义的校验不是本文要讲的,通过本文,我们只要了解到如果一个对象的多个属性之间有约束关系,那么我们可以使用class级别的来校验就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杂货铺的小掌柜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值