كيف يمكنني تغيير قواعد التحقق من صحة الشروح / السبات في وقت التشغيل؟

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

سؤال

إذا كان لديك فئة Java مع بعض الحقول التي أرغب في التحقق من صحةها باستخدام Validator السبات. الآن أريد أن يكون المستخدمون قادرين على تكوين وقت التشغيل الذي تحدث التحقق من الصحة.

علي سبيل المثال:

public class MyPojo {
    ...

    @NotEmpty
    String void getMyField() {
        ... 
    }

    ...
}

دعنا نقول أنني أريد إزالة NotEmpty تحقق أو استبدالها Email أو CreditCardNumber, ، كيف يمكنني فعل ذلك؟ هل هو ممكن؟ أعتقد أنه يأتي إلى تغيير التعليقات التوضيحية في وقت التشغيل ...

هل كانت مفيدة؟

المحلول

لا يمكنك أن تفعل ذلك بشكل طبيعي.

إليك ما قمت به للحصول على أكثر من صحة ديناميكية تعمل عبر Validator Hibernate.

  1. تمديد ClassValidator صف دراسي.
  2. تجاوز getInvalidVaues(Object myObj) طريقة. اول مكالمة super.getInvalidValues(myObj), ، ثم أضف الخطاف إلى التحقق حسب الطلب.
  3. إنشاء مثيل الخاص بك مخصص والمكالمة getInvalidValues للتحقق من صحة. سوف تنطلق أي عمليات التحقق المشروحة السبات في هذه المرحلة، وسوف تطرد التحقق من الصحة الديناميكية المخصصة (أي شيء غير مدعوم عن طريق التوضيحية) كذلك.

مثال:

public class MyObjectValidator extends ClassValidator<MyObject>
{
    public MyObjectValidator()
    {
         super(MyObject.class);
    }

    public InvalidValue[] getInvalidValues(MyObject myObj)
    {
        List<InvalidValue> invalids = new ArrayList<InvalidValue>();
        invalids.addAll(Arrays.asList(super.getInvalidValues(myObj)));

        // add custom validations here
        invalids.addAll(validateDynamicStuff(myObj));

        InvalidValue[] results = new InvalidValue[invalids.size()];
        return invalids.toArray(results);
    }

    private List<InvalidValue> validateDynamicStuff(MyObject myObj)
    {
        // ... whatever validations you want ...
    }

}

لذلك يمكن أن يحتوي رمز التحقق المخصص الخاص بك على منطق مثل "هل هذا التحقق من الصحة، إذا قام المستخدم بتكوينه، وإلا يفعل ذلك"، وما إلى ذلك، فقد تكون قادرة أو غير قادر على الاستفادة من نفس الكود الذي يتسبب في صلصات السبات، ولكن في كلتا الحالتين، ما تفعله هو أكثر المشاركة في حالة استخدام "العادي" من Validator السبات.

نصائح أخرى

في الواقع، من الممكن في Validator Hibernate 4.1. فقط اقرأ الوثائق حول خلق القيود البرنامجي.

لا أعتقد أنك ستتمكن من إزالة أو تغيير التوضيحية، إنه جزء من تعريف الفصل. يمكنك بناء فئة جديدة، والتي تكون ممكنة في وقت التشغيل ولكن تشارك قليلا. قد يدعم السبات الوصول البرنامجي إلى التحقق من الصحة والسماح لك بتجاوز التوضيحية، وأنا لا أعرف API جيدا. يطلب السبات بعضا من فئة وقت التشغيل نفسها ... قد يكون ذلك مكانا جيدا لتعلم كيفية القيام بذلك إذا كنت مهتما.

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