Dropwizard验证错误消息

时间:2014-01-02 01:35:09

标签: java hibernate jersey dropwizard

有没有办法在Dropwizard的验证错误消息中添加变量?

的影响
@ValidationMethod(message=String.format("Url cannot be null, field value = %s", fieldValue))
public boolean isNotValid() {
    String fieldValue = this.getFieldValue();
    return this.url == null;
}

我只想将变量添加到错误消息中。

3 个答案:

答案 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 ++)相同的编译时代码执行。