【问题标题】:Hibernate Validator - Dynamic Validation-MessageHibernate Validator - 动态验证-消息
【发布时间】:2020-09-24 11:18:25
【问题描述】:

我有一个类 X,它具有三个字段:stateAB 的枚举)、ab。 当stateA时,a不能为null,当stateB时,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,但我不知道是否或如何。

【问题讨论】:

标签: java dynamic hibernate-validator


【解决方案1】:

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

context.buildConstraintViolationWithTemplate("message here");

享受吧!

【讨论】:

  • 就是这样,谢谢。为了完整起见,我应该使用 context.disableDefaultConstraintViolation() 禁用默认消息,并使用 context.buildConstraintViolationWithTemplate("my custom message").addConstraintViolation() 添加新消息。谢谢
猜你喜欢
  • 2013-08-12
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2011-06-13
  • 2016-10-09
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
相关资源
最近更新 更多