【发布时间】:2016-07-03 19:17:12
【问题描述】:
我在将 javax 注释与自定义 ConstraintValidators 结合时遇到问题。
我有一个示例类 Person,其中需要姓名和年龄。
@PersonConstraint
public class Person {
@NotNull
private String name;
@NotNull
private Integer age;
...
}
我还有一个额外的限制:
@Constraint(validatedBy = PersonValidator.class)
@Target(TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface PersonConstraint{
String message() default "...";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
对于自定义验证器:
public class PersonValidator implements ConstraintValidator<PersonConstraint, Person> {
...
@Override
public boolean isValid(Person value, ConstraintValidatorContext context) {
if(value.getAge() < 18)
return false;
...
}
}
现在验证 Person 对象并且年龄为 null 时,我在 PersonValidator 中遇到 Nullpointer 异常。我thoguht,这是由javax Annoation @NotNull 检查的东西。 是否有将注释与自定义验证器相结合的解决方案,还是我必须自己检查验证器中的空值?
(代码只是一个例子——但这是一个普遍的问题)
【问题讨论】:
-
你的意思是说,你需要控制验证的顺序对吗?
-
是的。这是我的意图。
-
这不是正确的答案,但为了简单起见,您可以在
PersonValidator类本身中验证 null 检查,对吗? -
这是最简单的方法,是的。但我认为它不正确。这个问题必须有一个通用的解决方案。
-
同意,我猜你应该看看
group。@GroupSequence ({Person.class, PersonValidator.class})更多参考:mrbool.com/knowing-the-hibernate-validator-part-2/21878
标签: java spring validation constraints bean-validation