Hibernate Validator - 动态验证消息

Hibernate Validator - Dynamic Validation-Message

我有一个包含三个字段的 class XstateAB 的枚举),ab。 当stateA时,a一定不能是null,当stateB时,b一定不能是null.

@ValidateCondition(message = "Validation failed")
public class X {
  private State state;
  private String a;
  private String b;
}

使用休眠验证器,我构建了以下验证器:

@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,但我不知道是否或如何。

很简单: 只需调用 isValid 区域内的上下文:

context.buildConstraintViolationWithTemplate("message here");

尽情享受吧!