Сообщение об ошибке проверки 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;
}

Я просто хочу добавить переменную в сообщение об ошибке.


person etang    schedule 02.01.2014    source источник


Ответы (3)


Я нашел ответ. Hibernate 5.1 имеет интерполяцию сообщений об ошибках, которая как бы заботится об этом.

@Size(min = 0, max = 0, message="${validatedValue} is present"))
public String getErrorMessage() {
    List<String> illegalValues = ImmutableList.of("illegal value");
    return illegalValues;
}

Это немного хакерски, но это решает проблему. Взгляните на http://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-message-interpolation.html

person etang    schedule 08.01.2014
comment
Нужна ли дополнительная конфигурация или включение jar? Интерполяция у меня не происходит. @этанг - person Ustaman Sangat; 25.07.2016
comment
Мне пришлось сделать следующее: environment.setValidator(Validators .newValidatorFactory() .usingContext() .messageInterpolator(new ParameterMessageInterpolator()) .getValidator()); Но у меня все еще нет интерполируемой переменной для @ValidationMethod(message="${what} blah") - person Ustaman Sangat; 25.07.2016

Я нашел правильный способ проверки bean-компонентов - не используйте @ValidationMethod от dropwizard, а вместо этого определите свою собственную аннотацию и валидатор:

@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 :-)
     }
}
person Ustaman Sangat    schedule 29.07.2016

Я не знаком с Dropwizard, но аннотации Java — это просто метаданные времени компиляции. Вы не можете вызывать методы в объявлениях аннотаций просто потому, что компилятор Java не выполняет такое же выполнение кода во время компиляции, как некоторые другие компиляторы, такие как C или C++.

person Kyle    schedule 02.01.2014