我有一个让我们说Car
个对象的列表。每辆车都有一个miles
会员。
我需要验证(使用Hibernate Validator)我列表中至少有一辆车有一个非空miles
成员。最佳解决方案是应用于集合的所有元素的注释,但将在整个集合的上下文中进行验证。
我有两个问题:
如果没有此注释,有没有办法创建通用注释?
我想到了至少为列表中的一个元素指定了必须不为null的字段的名称,那么我不仅可以将它应用于Car
类。
public class VechicleTransport {
@AtLeastOneNotNull( fieldName = "miles" )
private List<Car> carList;
}
public class Car {
private Double miles;
....
}
答案 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了解更多详情