من الضروري في الآونة الأخيرة إرسال بيانات ديناميكية ، أي أنك تحتاج إلى تحليل وإرسال معلومات تعريف حقل البيانات قبل أن تتمكن من توضيح أنواع الحقول المحددة المقابلة ، ثم القيام بتحويل نوع البيانات والتحقق من صحة الحقل. بعد ذلك ، بعد إجراء معالجة الأعمال ، إرسال قاعدة البيانات ، وتطوير مجموعة من منطق التحقق بنفسك ، فإن الدورة طويلة جدًا. لذلك ، تم تحليل مبدأ التنفيذ للتحقق من صحة الربيع ، وتم إعادة استخدام مختلف المدقق الأساسي. هنا ، سيتم تسجيل عملية تحليل مبدأ التحقق من صحة الربيع دون الخوض في التفاصيل.
كيفية استخدام التحقق من صحة الربيع
تحقق مما إذا كانت الفول تتوافق مع مواصفات JSR-303 عند تهيئة حبوب الربيع
1. أضف الفول الفول بوست بروكسور يدويًا
2. تحديد قواعد التحقق في فئة النموذج ، مثل max ، min ، notempty
3. إعلان الفول ، الرمز الشامل هو كما يلي:
beanpublic beanpostprocessor beanvalidationpostprocessor () {return new BeanValidationPostProcessor () ؛}@Beanpublic Usermodel getusermodel () {Usermodel usermodel = new UserModel () ؛ usermodel.setUserName (null) ؛ usermodel.setPassword ("123") ؛ إرجاع usermodel ؛} @dataclass usermodel {notnull (message = "username لا يمكن أن يكون فارغًا") pattern (regexp = "[[a-za-z0-9 _] {5،10}" ، message = "username is assal") username username ؛ size (min = 5 ، max = 10 ، message = "طول كلمة المرور غير قانوني") كلمة مرور السلسلة الخاصة ؛}4. BeanValidationPostProcessor هناك خاصية من النوع المنطقي بعد التحجيم ، وهو خاطئ بشكل افتراضي. إذا كان هذا خطأ ، يتم التحقق من الفول في عملية تحديث ما بعد المعالجة. خلاف ذلك ، يتم التحقق من الفاصوليا في عملية تحديث ما بعد المعالجة.
5. هذا التحقق يستخدم منطق BeanpostProcessor Spring
6. تحقق من أن طريقة dovalidate تسمى ، ومزيد من مكالمات التحقق. المدقق الافتراضي هو HibernateValidator ، وحزمة التحقق من الصحة هي مواصفات Java ، ويتم تنفيذ مواصفات الربيع الافتراضية كحزمة Hibernate-Validator. هذا الإطار غير الإطار السباتي غير الإطار
void void dovalidate (Object Bean) {Assert.state (this.validator! = null ، "no deadator set") ؛ SET <constraintViolation <Object >> result = this.validator.validate (Bean) ؛7. استدعاء HibernateValidator ValitatorFactoryImpl افتراضيًا لإنشاء المدقق ، ثم توسيع ValitatorFactoryImpl
مواصفات JSR-303 على مستوى طريقة الدعم
1. إضافة MethodValidationPostProcessor يدويًا
2. أضف التعليق التوضيحي المعدل إلى الفصل (يتم دعم التعليقات التوضيحية المخصصة أيضًا ، ويتم تمريرها عند إنشاء MethodValidationPostProcessor Bean)
3. أضف تعليقات التحقق إلى معلمات الطريقة ، مثل max ، min ، notempty ، notnull ، إلخ.
@component@valudatedpublic class beanformethodvalidation {public void vialdation (notempty string name ، min (10) int age) {system.out.println ("Validay ، name:" + name + "، age:" + age) ؛ }}4. يستخدم MethodValidationPostProcessor AOP لإكمال المكالمة إلى الطريقة
public void perfpropertiesset () {pointcut pointCut = new `anotationMatchingPointCut` (this.validatedannotationType ، true) ؛ this.advisor = new `defaultPointCutAdvisor` (pointcut ، createMethodValidationAdvice (this.validator)) ؛} المشورة المحمية createmethodvalidationAdvice (nullable doothator)5. تقوم الطبقة الأساسية أيضًا باستدعاء ValitatorFactoryImpl افتراضيًا لإنشاء المدقق ، ويكمل التحقق من التحقق.
منطق التحقق من مكالمات الترميز المباشر ، مثل
شخص فئة عامة {notnull (message = "الجنس لا يمكن أن يكون فارغًا") بين الجنسين بين الجنسين ؛ min (10) عصر عدد صحيح خاص ؛ ...} التحقق من صحة adadatorFactory = Validation.BuildDefaultValidatorFactory person () ؛ person.setgender (Gender.man) ؛ Valitator.validate (person) ؛كما هو مذكور أعلاه ، يتم استدعاء المكالمة الافتراضية إلى ValitatorFactoryImpl لإنشاء المدقق ، ويكمل التحقق من التحقق المحدد.
استخدم التعليق التوضيحي الصحيح أو التحقق من صحة لتوضيح المعلمات المراد فحصها في معلمات طريقة وحدة التحكم في الربيع
1. أولاً ، تعرف على طلب الربيع وعملية الاتصال
2. يمكنك أن ترى أن التحقق من المعلمة يتم أثناء عملية معلمات طلب المعالجة المختلفة.
3. الطبقة الأساسية تستدعي طريقة التحقق من صحة Databinder بشكل موحد
4. دور Databinder: الموثق الذي يسمح بتعيين قيم الخصائص على كائن مستهدف ، بما في ذلك دعم التحقق من الصحة وتحليل نتائج الربط ، أي أن Binder يعالج معلمات شكل السلسلة المقدمة حسب الطلب وتحويلها إلى النوع الذي يحتاجه الخادم حقًا. يوفر الموثق دعمًا للتحقق من الصحة ويمكنه تخزين نتائج التحقق.
5. تتم تهيئة مصادقة Databinder في configableWebBindingInitializer بشكل افتراضي. يتم استخدام اختياري ValidatorFactoryBean افتراضيًا. يرث هذا الفول المحلي المحلي. يجمع LocalValIdatorFactoryBean بين معلومات التحقق المختلفة مثل ValitorFactory ، وخصائص التحقق المخصصة ، وما إلى ذلك ، وتستخدم ValitatorFactoryImpl للحصول على المدقق افتراضيًا.
في هذه المرحلة ، تشير جميع القرائن إلى ValitatorFactoryImpl. التحليل التالي هو ما يلي
المدقق العام `getValidator` () {return` createvalidator` (constrentvalidatormanager.getDefaultConstraintValIdatorFactory () ، valueextractormanager ، adadatorFactoryScopedContext ، methodValidationConfiguration) ؛ ValueExtractormanager valueExtractormanager ، ValitatorFactoryScopedContext ValitatorFactoryScopedContext ، methodvalidationConfiguration MethodValidationConfiguration) ValitatorFactoryScopedContext.getParameTernameProvider () ، ValueExtractorManager ، MethodValidationConfiguration) ، Key -> NewMetadatamanager (`strainthelper` ، executablehelper ، typeresolutionhelper ، defutatorfactoryScopedContext.getParameProvider () ، ValidentOrderGenerator ، BuildDataproviders () ، MethodValidationConfiguration)) ؛ إرجاع `ValidatorImpl` (constrentvalidatorfactory ، beanmetadatamanager ، valueextractormanager ، constrentvalidatormanager ، validationOrderGenerator ، ValidatorFactoryScopedContext) ؛} النهائي العام <t> set <TrantaintViolation <t> viality (TOBIVE ، CONFORM) messages.validatedObjectMustNotBenull ()) ؛ SANITYCHECKGROUPS (مجموعات) ؛ ValactionContext <T> ValidationContext = `getValidationContextBuilder (). forValidate (Object)` ؛ if (! ValidationContext.getRootbeanmetadata (). hasconstraints ()) {return collections.emptyset () ؛ } ValideOrderOrder ValideOrder = reconyGroupValidationOrder (مجموعات) ؛ ValueContext <؟ ، Object> valueContext = `valuecontext.getlocalexecutioncontext` (ValitoratorsCopedContext.getParameternameProvider () ، كائن ، ValidationContext.getRootbeanmetadata () ، pathimpl.creatoardpath ()) ؛ Return ValidateIncontext (ValityContext ، ValueContext ، ValidationOrder) ؛}1. getValidator-> CreatevalIdator-> ValitatorImpl-> التحقق من صحة
أثناء عملية التنفيذ ، يتم تغليف beanmetadatamanager و ValityContext و Valuecontext وغيرها ValitatorFactoryScopedContext ، وما إلى ذلك ، والمحتوى معقد نسبيا.
2. يتم تجاهل التحقق من المجموعة ، ومعالجة المجموعة الافتراضية هي ValidateConstraintSfordefaultGroup-> ValidateConstraintsForSeDeDefaultGroupelement-> ValidateMetAconstrain
3. استمر في استدعاء طريقة DovalidateConstraint من Metaconstraint ، واتبع عصيدة مختلفة وفقًا لأنواع التعليقات التوضيحية المختلفة.
الثابت العام <u يمتد التعليق التوضيحي> constrainttree <u> من (constrentdescriptorimpl <u> composingDescriptor ، type typeedvalueType) {if (composingDescriptor.getCompositingConstraintImpls (). isEmpty ()) } آخر {return new composingConstraintTree <> (composingDescriptor ، ValuadedValueType) ؛ }}4. ماذا يجب أن أذهب بسيطة وماذا يجب أن يكون التأليف؟ لأن كلاهما يطلق على طريقة "getInitializedConstraintValidator" للقرص. يتم استخدام هذه الخطوة للحصول على المدقق المقابل للشرح (مثل العقد العشري ، غير المألوف ، وما إلى ذلك) وتهيئة المدقق.
5. تحافظ فئة ConstraintHelper على جميع صحة مصنفة وتصنيفها وفقًا لتعليق التحقق من التحقق (مثل العقد). تحافظ فئة وصف المدقق على القالب العام للمقاومة (مثل BigDecimal) على النحو التالي:
putconstraints (tmpconstraints ، decimalmax.class ، arrays.aslist (decimalmaxvalidatorbigdecimal.class ، decimalmaxvalidatorforbiginteger decimalmaxvalidatorfornumber.class ، decimalmaxvalidatorforcharevensence.class ، decimalmaxvalidatorformonetaryamount.class) ؛
عند الحصول على التحقق من فئة الفاصوليا المحددة ، احصل أولاً على جميع صحة وفقًا للشرح. الطريقة المقابلة هي constrantmanager.findMatchingValidatordescriptor ، ثم الحصول على المدقق الفريد وفقًا لنوع الكائن الذي يتم فحصه.
6. ثم تهيئة Validator بناءً على معلومات السياق ، ثم اتصل بطريقة ISValid الخاصة بالمقحة للتحقق
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.