JSR 303: كيفية التحقق من صحة مجموعة من الأشياء المشروحة؟

StackOverflow https://stackoverflow.com/questions/4106772

سؤال

هل من الممكن التحقق من صحة مجموعة من الكائنات في JSR 303 - Jave Bean Validation حيث لا تحتوي المجموعة نفسها على أي تعليقات توضيحية ولكن العناصر الموجودة داخلها؟

على سبيل المثال ، هل من الممكن أن يؤدي ذلك إلى انتهاك للقيود بسبب اسم فارغ على الشخص الثاني:

List<Person> people = new ArrayList<Person>();
people.add(new Person("dave"));
people.add(new Person(null));

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<List<Person>>> validation = validator.validate(people);
هل كانت مفيدة؟

المحلول

نعم ، فقط أضف @Valid إلى المجموعة.

هنا مثال من مرجع التحقق من السبات.

public class Car {
  @NotNull
  @Valid
  private List<Person> passengers = new ArrayList<Person>();
}

هذا هو سلوك JSR-303 القياسي. انظر القسم 3.1.3 من المواصفات.

نصائح أخرى

يمكنك أيضا إضافة @NotEmpty إلى المجموعة.

public class Car {
  @NotEmpty(message="At least one passenger is required")
  @Valid
  private List<Person> passengers = new ArrayList<Person>();
}

هذا سيضمن وجود راكب واحد على الأقل ، و @Valid يضمن التعليق التوضيحي كل منهما Person تم التحقق من صحة الكائن

يمكنك بالطبع أيضًا التكرار على القائمة ومكالمات المكالمات. أو ضع القائمة في بعض الفاصوليا الغلاف وتوضيحها مع Valid. يبدو أن تمديد قائمة ArrayList للتحقق من الصحة. هل لديك حالة استخدام خاصة تريد حلها مع هذا؟ إذا كان الأمر كذلك ، فربما يمكنك شرح ذلك أكثر من ذلك بقليل. للإجابة على سؤالك الأولي:

هل من الممكن التحقق من صحة مجموعة من الكائنات في JSR 303 - Jave Bean Validation حيث لا تحتوي المجموعة نفسها على أي تعليقات توضيحية ولكن العناصر الموجودة داخلها؟

رقم

كتبت هذه الفئة العامة:

public class ValidListWrapper<T> {

    @Valid
    private List<T> list;

    public ValidListWrapper(List<T> list) {
        this.list = list;
    }

    public List<T> getList() {
        return list;
    }

}

إذا كنت تستخدم مكتبة Jackson لإلغاء التخلص من JSON ، يمكنك إضافة @JsonCreator التعليقات التوضيحية على المُنشئ وجاكسون سيقوم تلقائيًا بإلغاء صفيف JSON إلى كائن Wrapper.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top