【发布时间】:2020-09-24 11:18:25
【问题描述】:
我有一个类 X,它具有三个字段:state(A 和 B 的枚举)、a 和 b。
当state为A时,a不能为null,当state为B时,b不能为null。
@ValidateCondition(message = "Validation failed")
public class X {
private State state;
private String a;
private String b;
}
使用 hibernate-validator,我构建了以下验证器:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyValidator.class)
@Documented
public @interface ValidateCondition {
String message() default "ValidateCondition failed";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class MyValidator implements ConstraintValidator<ValidateCondition, X> {
@Override
public boolean isValid(X x, ConstraintValidatorContext context) {
if(x.getState()==State.A){
return x.getA() != null;
}
if(x.getState()==State.B){
return x.getB() != null;
}
}
}
因此,每当验证失败时,我目前都会收到消息 Validation failed,但我想要的是一条消息,告诉我失败的原因,例如 Since state was B, b must not be blank。
我假设我可以通过某种方式使用ConstraintValidatorContext,但我不知道是否或如何。
【问题讨论】:
-
您好,看看这是否是您问题的答案stackoverflow.com/questions/23702975/…
标签: java dynamic hibernate-validator