Pesan Kesalahan Validasi Dropwizard

Apakah ada cara untuk menambahkan variabel dalam pesan kesalahan validasi Dropwizard? Sesuatu dalam pengaruh

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

Saya hanya ingin menambahkan variabel ke dalam pesan kesalahan.


person etang    schedule 02.01.2014    source sumber


Jawaban (3)


Saya menemukan jawabannya. Hibernate 5.1 memiliki interpolasi pesan kesalahan yang menangani hal ini.

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

Ini sedikit hacky, tapi itu menyelesaikan masalah. Lihatlah http://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-message-interpolation.html

person etang    schedule 08.01.2014
comment
Apakah diperlukan konfigurasi tambahan atau penyertaan jar? Interpolasi tidak terjadi pada saya. @etang - person Ustaman Sangat; 25.07.2016
comment
Saya harus melakukan hal berikut: environment.setValidator(Validators .newValidatorFactory() .usingContext() .messageInterpolator(new ParameterMessageInterpolator()) .getValidator()); Tapi saya masih belum memiliki variabel interpolasi yang tersedia untuk @ValidationMethod(message="${what} blah") - person Ustaman Sangat; 25.07.2016

Saya menemukan cara yang tepat untuk memvalidasi kacang - jangan gunakan @ValidationMethod dropwizard, tetapi tentukan anotasi dan validator Anda sendiri:

@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

Saya tidak terbiasa dengan Dropwizard, tetapi anotasi Java hanyalah metadata waktu kompilasi. Anda tidak dapat memanggil metode dalam deklarasi anotasi hanya karena kompiler Java tidak melakukan eksekusi kode waktu kompilasi yang sama seperti beberapa kompiler lainnya, seperti C atau C++.

person Kyle    schedule 02.01.2014