ข้อความแสดงข้อผิดพลาดการตรวจสอบ 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

ฉันพบวิธีที่เหมาะสมในการตรวจสอบถั่ว - อย่าใช้ @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