مقدمة
مكون المدقق في إطار الربيع هو مكون إضافي ، وهو مفيد جدًا لسلامة البيانات وصلاحيتها. من خلال تحديد مدقق معين ، يمكن استخدامه في أماكن أخرى مطلوبة ، وهو أمر شائع جدًا.
قبل تنفيذ منطق العمل ، من الضروري التأكد من أن بيانات الإدخال المستلمة قانونية وصحيحة من خلال التحقق. ومع ذلك ، في كثير من الأحيان يحدث التحقق نفسه عدة مرات ، مما يؤدي إلى التكرار الكود ، ويضيع الوقت ، وينتهك المبدأ الجاف.
يمكنك التفكير في تغليف رمز التحقق لحل هذه المشكلات.
JSR-303
JSR-303 هو إطار قياسي تقدمه Java للتحقق من شرعية بيانات Bean. إنه يحدد مجموعة من التعليقات التوضيحية للتحقق التي يمكن شرحها على متغيرات الأعضاء وطرق السمة.
يوفر التحقق من صحة السبات هذه المجموعة من التطبيقات القياسية. عندما نقدم SPRING BOOT Web Starter أو Spring Boot Starter ، سيتم تقديم التحقق من صحة Hibernate افتراضيًا.
مثال الاستخدام
بعد قول الكثير من الهراء ، أضف الرمز.
1.
<Rependency> <roupeD> org.springframework.boot </rougiD> <insifactid> Spring-Boot-Starter-Web </shintifactid> </premited> <redence> <roupid> org.hibernate.validator </rouciD> <Rependency> <roupiD> org.projectlombok </groupId> <StifactId> lombok </shintifactid> </perimency>
2. اكتب كائنات التحقق
@datapublic class user {// لا يُسمح للاسم بأن يكون فارغًا ، ويتكون طول الاسم بين 2 و 30 بت // إذا لم يمر طول الاسم ، فسيتم مطالبة رسالة الخطأ @notnullsize (min = 2 ، max = 30 ، message = "يرجى التحقق مما إذا كان هناك أي مشكلة في طول الاسم") اسم السلسلة الخاص ؛ // لا يُسمح بالاسم بأن يكون فارغًا ، والحد الأدنى للسن هو 18 notnull min (18) عصر عدد صحيح خاص ؛}3. إنشاء وحدة تحكم
@springbootapplication@restControllerPublic class userapplication {public static void main (string [] args) {springapplication.run (userapplication.class ، args) ؛ } // 1. إضافة التعليق التوضيحي Valid قبل التحقق من المعلمة // 2. اتبعها على الفور ، اتبع bindingResult لتخزين معلومات التحقق @requestmapping ("/test1") test1 ( @مستخدم user @ @ @ @ @ @ @مستخدم @ @regresuls bindingrensult) {// إذا كانت هناك مشكلة في التحقق ، سيتم إرجاع رسالة الخطأ // في الواقع ، يمكن إرجاع المعلومات المخصصة وفقًا لطريقة BindingResult حسب الحاجة. // الحل المعتاد هو: JSR-303 + Global ConsectionHandler if (bindingResult.haserrors ()) {return bindingResult.getAllerRors () ؛ } إرجاع "موافق" ؛ }} 4. قم بتشغيل التطبيق
بعد عرض موجز لنتائج العملية ، يمكن ملاحظة أن إطار التحقق قد بدأ سريانه.
تحقق من العمر
تحقق من الاسم
لقد مرت التحقق
التعليقات التوضيحية للتحقق المشترك
@null يجب أن يكون العنصر المشروح فارغًا
notnull يجب ألا يكون العنصر المشروح فارغًا
ASTERTRUE يجب أن يكون العنصر المشروح صحيحًا
@ASTERTFALSE يجب أن يكون العنصر المشروح خاطئًا
min (القيمة) يجب أن يكون العنصر المشروح رقمًا ، ويجب أن تكون قيمته أكبر من أو تساوي القيمة الدنيا المحددة.
max (القيمة) يجب أن يكون العنصر المشروح رقمًا ، ويجب أن تكون قيمته أقل من أو تساوي القيمة القصوى المحددة.
decimalmin (القيمة) يجب أن يكون العنصر المشروح رقمًا ، ويجب أن تكون قيمته أكبر من أو تساوي القيمة الدنيا المحددة
decimalmax (القيمة) يجب أن يكون العنصر المشروح رقمًا ، ويجب أن تكون قيمته أقل من أو تساوي القيمة القصوى المحددة
size (max = ، min =) يجب أن يكون حجم العنصر المشروح ضمن النطاق المحدد.
digits (عدد صحيح ، الكسر) يجب أن يكون العنصر المشروح رقمًا ويجب أن تكون قيمته ضمن نطاق مقبول.
past يجب أن يكون العنصر المشروح هو التاريخ السابق
future يجب أن يكون العنصر المشروح تاريخًا مستقبليًا
pattern (regex = ، flag =) يجب أن يمتثل العنصر المشروح للتعبير العادي المحدد
تحقق من التعليقات التوضيحية المقدمة من صحة السبات:
notblank (message =) تحقق من أن السلسلة ليست فارغة ويجب أن تكون أكبر من 0
email يجب أن يكون العنصر المشروح هو عنوان بريد إلكتروني
length (min = ، max =) يجب أن يكون حجم السلسلة المشروحة ضمن النطاق المحدد.
notempty يجب أن تكون السلسلة المعلقة غير فارغة
range (min = ، max = ، message =) يجب أن يكون العنصر المشروح ضمن النطاق المناسب
التعليقات التوضيحية للتحقق المخصص
في بعض الأحيان ، لا يكون نوع التحقق الذي نريده في مكتبة الطرف الثالث. لحسن الحظ ، يوفر النظام إمكانيات توسيع جيدة ، ويمكننا تخصيص التحقق.
على سبيل المثال ، نريد التحقق من تنسيق الهاتف المحمول للمستخدم وكتابة جهاز التحقق من رقم الهاتف المحمول.
1. اكتب التعليقات التوضيحية للتحقق
// يمكننا نسخ التعليق التوضيحي مباشرة في النظام مثل @min ، ونسخه إلى شرحنا الجديد ، ثم تعديله حسب الحاجة. @target ({method ، الحقل ، التعليق التوضيحي _type ، مُنشئ ، معلمة})@attreence (runtime)@موثقة // فئة التنفيذ للشروح. @constraint (validatedBy = {IsMobileValidator.class}) public interface isMobile {// معلومات افتراضية للتحقق من رسالة سلسلة الأخطاء () الافتراضي "هناك مشكلة في تنسيق رقم الهاتف المحمول" ؛ // ما إذا كان يجب إجبار التحقق من Boolean IsRequired () الافتراضي الخاطئة ؛ الفئة <؟> [] المجموعات () الافتراضي {} ؛ الفئة <؟ يمتد Payload> [] Payload () افتراضي {} ؛} 2. اكتب فئات تنفيذ محددة
نحن نعلم أن التعليقات التوضيحية مجرد علامة ، ويجب تنفيذ المنطق الحقيقي في فصل محدد. يحدد التعليق التوضيحي في الخطوة السابقة أن الفئة التي تنفذ وظيفة التحقق هي IsmobileValidator.
// يجب أن تنفذ التعليقات التوضيحية المخصصة لواجهة ConstraintValIdator ، معلمتان في ذلك // الأول هو التعليق التوضيحي المحدد الذي يتم التحقق منه // والثاني هو نوع المعلمة من الفئة العامة من الفئة العامة IsMobileValidator التي تنفذ constraintvalidator <isMobile ، string> {private boolean المطلوبة = false ؛ Private Static Final Pattern Mobile_pattern = pattern.compile ("1 // d {10}") ؛ // طريقة الأداة ، حدد ما إذا كان رقم الهاتف المحمول الثابت الثابت isMobile (String SRC) {if (stringUtils.isempty (src)) {return false ؛ } matcher m = mobile_pattern.matcher (src) ؛ إرجاع M.Matches () ؛ } override public void تهيئة (isMobile crodentAntAntAntation) {مطلوب = constrintannotation.isrequired () ؛ } Override Public Boolean Isvalid (سلسلة سلسلة ، CrodentValIdatorContext CrosnaintValidatorContext) {// هل هو تطبيق رقم هاتف محمول إذا (مطلوب) {return isMobile (phone) ؛ } آخر {if (stringUtils.isempty (phone)) {return true ؛ } آخر {return isMobile (phone) ؛ }}}} 3. اختبر وظيفة التعليقات التوضيحية المخصصة
datapublic class user {notnullsize (min = 2 ، max = 30 ، message = "يرجى التحقق مما إذا كان هناك أي مشكلة مع طول الاسم") اسم السلسلة الخاصة ؛ notnull min (18) عصر عدد صحيح خاص ؛ // هذا هو التعليق التوضيحي المضافة حديثًا على هاتف السلسلة الخاصة ؛}4. اختبار
يمر
هناك مشكلة في رقم الهاتف المحمول
يمكن أن نرى أن التعليقات التوضيحية المخصصة قد بدأ سريان.
يمكننا أيضًا مواصلة تحسين المكان وإنشاء استثناء عالمي جديد. إذا فشل التحقق ، رمي استثناءات الأعمال العالمية ، واكتشف استثناءات الأعمال ، ثم إرجاع معلومات موجه سهلة الاستخدام.
إضافي
يمكن أن يمر أيضًا التحقق من الطريقة.
1. أضف التعليق التوضيحي إلى وحدة التحكم
2. أضف تعليقات التحقق ، min ، max ، إلخ إلى طريقة وحدة التحكم.
@صدق@restController@springbootapplicationpublicpublic userapplication {public static void main (string [] args) {springapplication.run (userapplication.class ، args) ؛ } requestmapping ("/test2") سلسلة public test2 ( @simobile string phone) {return phone + "ok" ؛ } exceptionHandler (constraintViolationException.class) reSponsebody كائن عام HandleConstraintViolationException (constrentviolationexception cve) {hashset <string> messageset = new hassset () ؛ لـ (constraintviolation constrentviolation: cve.getConstraintViolations ()) {messageet.add (constrentviolation.getMessage ()) ؛ } إرجاع الرسائل ؛ }} قواعد التحقق من الطبقة
في النهاية
باستخدام جهاز التحقق ، لم نعد بحاجة إلى التحقق من جميع وحدات التحكم. إذا كان الرمز منعشًا كثيرًا ، فسيكون ذلك. نكتب الكود بإيجاز شديد ، ولكن يجب أن نفكر في كيفية كتابة الكود أبسط وأكثر وضوحًا وأكثر مواتية للصيانة. كتابة الكود المكررة هي مضيعة لوقتك.
عندما تواجه التحقق من المعلمة في المستقبل ، فإن أول شيء تفكر فيه هو عدم التحقق من ذلك مباشرة. يمكنك معرفة ما إذا كنت قد كتبت نوعًا معينًا من التحقق ويمكنك استخدامه مباشرة.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.