有没有办法在Dropwizard的验证错误消息中添加变量?
的影响@ValidationMethod(message=String.format("Url cannot be null, field value = %s", fieldValue))
public boolean isNotValid() {
String fieldValue = this.getFieldValue();
return this.url == null;
}
我只想将变量添加到错误消息中。
答案 0 :(得分:1)
我找到了答案。 Hibernate 5.1有错误消息插值,有点照顾这个。
@Size(min = 0, max = 0, message="${validatedValue} is present"))
public String getErrorMessage() {
List<String> illegalValues = ImmutableList.of("illegal value");
return illegalValues;
}
这有点hacky,但它解决了这个问题。看看http://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-message-interpolation.html
答案 1 :(得分:1)
我找到了验证bean的正确方法 - 不要使用dropwizard的@ValidationMethod,而是定义自己的注释和验证器:
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = MyValidator.class})
@Documented
public @interface ValidPerson {
String message() default "Bad person ${validatedValue.name}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
class MyValidator implements ConstraintValidator<ValidPerson,Person> {
@Override
public void initialize(ValidPerson annotaion) {}
@Override
public boolean isValid(Person p, ConstraintValidatorContext context) {
return false; //let's say every person is invalid :-)
}
}
答案 2 :(得分:0)
我不熟悉Dropwizard,但Java的注释只是编译时元数据。 您无法在注释声明中调用方法,因为Java编译器不会执行与其他编译器(如C或C ++)相同的编译时代码执行。