Bean验证:列表中至少有一个元素必须填充一个字段

时间:2014-04-08 05:32:43

标签: java hibernate validation java-ee bean-validation

我有一个让我们说Car个对象的列表。每辆车都有一个miles会员。 我需要验证(使用Hibernate Validator)我列表中至少有一辆车有一个非空miles成员。最佳解决方案是应用于集合的所有元素的注释,但将在整个集合的上下文中进行验证。

我有两个问题:

  • 是否已有注释(我不知道)?
  • 如果没有此注释,有没有办法创建通用注释? 我想到了至少为列表中的一个元素指定了必须不为null的字段的名称,那么我不仅可以将它应用于Car类。

    public class VechicleTransport {
    
        @AtLeastOneNotNull( fieldName = "miles" )
        private List<Car> carList;
    }
    
    
    public class Car {
    
      private Double miles;
    
        ....
    }
    

1 个答案:

答案 0 :(得分:3)

AFAIK没有这样的注释,您需要定义自定义约束注释并在其中定义验证逻辑。

定义自定义约束注释AtLeastOneNotNull

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy=AtLeastOneNotNullValidator.class)

public @interface AtLeastOneNotNull{
 String message() default "Your error message";
 Class<!--?-->[] groups() default {};
 Class<!--? extends Payload-->[] payload() default {};
}   

为自定义注释定义验证器。

public class AtLeastOneNotNullValidator implements ConstraintValidator<AtLeastOneNotNull, object=""> {

 @Override
 public void initialize(AtLeastOneNotNull constraint) {

 }

 @Override
 public boolean isValid(Object target, ConstraintValidatorContext context) {
    // Add logic to check if atleast one element have one field
 }
}

Link了解更多详情