אימות שעועית בג'רזי

1. סקירה כללית

במדריך זה, אנו נסתכל על אימות שעועית באמצעות מסגרת הקוד הפתוח ג'רזי.

כפי שכבר ראינו במאמרים קודמים, ג'רזי היא מסגרת קוד פתוח לפיתוח שירותי אינטרנט RESTful. אנו יכולים לקבל פרטים נוספים על ג'רסי בהקדמה שלנו כיצד ליצור ממשק API עם ג'רזי וספרינג.

2. אימות שעועית בג'רזי

אימות הוא תהליך האימות כי נתונים מסוימים מצייתים לאילוצים מוגדרים מראש או יותר. זה, כמובן, מקרה שימוש שכיח ביותר ברוב היישומים.

מסגרת האימות של Java Bean (JSR-380) הפכה לסטנדרט בפועל לטיפול בסוג זה של פעולות בג'אווה. לסיכום על היסודות של אימות שעועית Java, עיין במדריך הקודם שלנו.

ג'רזי מכילה מודול הרחבה לתמיכה באימות שעועית. כדי להשתמש ביכולת זו ביישום שלנו, ראשית עלינו להגדיר אותה. בחלק הבא נראה כיצד להגדיר את הגדרת היישום שלנו.

3. הגדרת יישום

עכשיו, בואו ונבנה על הדוגמה הפשוטה של ​​API API ממאמר התמיכה המצוין ב- Jersey MVC.

3.1. תלות Maven

קודם כל, בואו נוסיף את התלות של אימות שעועית pom.xml:

 org.glassfish.jersey.ext אימות ג'רזי-שעועית 2.27 

אנו יכולים להשיג את הגרסה האחרונה ממייבן סנטרל.

3.2. קביעת תצורה של השרת

בג'רזי, אנו בדרך כלל רושמים את תכונת ההרחבה בה אנו רוצים להשתמש במחלקת תצורת משאבים מותאמת אישית.

עם זאת, עבור הארכת אימות השעועית, אין צורך לבצע רישום זה. למרבה המזל, זו אחת ההרחבות הבודדות שמסגרת ג'רזי רושמת אוטומטית.

לבסוף, למשלוח שגיאות אימות ללקוח נוסיף מאפיין שרת לתצורת משאבים מותאמת אישית שלנו:

public ViewApplicationConfig () {חבילות ("com.baeldung.jersey.server"); נכס (ServerProperties.BV_SEND_ERROR_IN_RESPONSE, נכון); } 

4. אימות שיטות משאבים של JAX-RS

בחלק זה נסביר שתי דרכים שונות לאימות פרמטרי קלט באמצעות הערות אילוצים:

  • שימוש באילוצים מובנים של אימות שעועית מובנית
  • יצירת אילוץ ומאמת מותאמים אישית

4.1. שימוש בהערות אילוץ מובנות

נתחיל בבחינת הערות אילוץ מובנות:

@POST @ Path ("/ create") @ Consumes (MediaType.APPLICATION_FORM_URLENCODED) public void createFruit (@NotNull (message = "שם פרי לא יכול להיות ריק") @ FormParam ("name") שם מחרוזת, @NotNull (message = "צבע פרי לא יכול להיות ריק") @FormParam ("צבע") צבע מחרוזת) {פרי פרי = פרי חדש (שם, צבע); SimpleStorageService.storeFruit (פירות); } 

בדוגמה זו, אנו יוצרים חדש פרי באמצעות שני פרמטרים של טופס, שֵׁם ו צֶבַע. אנו משתמשים ב- @לא ריק הערה שהיא כבר חלק מממשק ה- API של אימות שעועית.

זה מטיל אילוץ פשוט ולא אפס על פרמטרי הטופס שלנו. במקרה שאחד הפרמטרים הוא ריק, ההודעה שהוכרזה במסגרת ההערה תוחזר.

באופן טבעי נדגים זאת באמצעות מבחן יחידה:

@ מבחן הריק פומבי givenCreateFruit_whenFormContainsNullParam_thenResponseCodeIsBadRequest () {Form form = Form חדש (); form.param ("שם", "תפוח"); form.param ("צבע", null); תגובה תגובה = יעד ("פרי / צור"). בקשה (MediaType.APPLICATION_FORM_URLENCODED). פוסט (Entity.form (טופס)); assertEquals ("תגובת Http צריכה להיות 400", 400, response.getStatus ()); assertThat (response.readEntity (String.class), containString ("צבע הפרי לא יכול להיות ריק")); } 

בדוגמה שלעיל, אנו משתמשים ב- ג'רסי טסט בכיתת תמיכה לבדיקת משאב הפירות שלנו. אנו שולחים בקשת POST עם null צֶבַע ובדוק שהתגובה מכילה את ההודעה הצפויה.

לקבלת רשימה של מגבלות אימות מובנות, עיין במסמכים.

4.2. הגדרת ביאור אילוץ מותאם אישית

לפעמים אנחנו צריכים להטיל אילוצים מורכבים יותר. אנו יכולים לעשות זאת על ידי הגדרת ההערה המותאמת אישית שלנו.

בעזרת הדוגמה הפשוטה של ​​API של פירות, בואו נדמיין שעלינו לאמת שלכל הפרי יש מספר סידורי תקף:

@PUT @Path ("/ update") @Consumes ("application / x-www-form-urlencoded") public void updateFruit (@SerialNumber @FormParam ("serial") סדרת מחרוזות) {// ...} 

בדוגמה זו, הפרמטר סידורי חייב לעמוד באילוצים שהוגדרו על ידי @מספר סידורי, שנגדיר בהמשך.

נגדיר תחילה את הערת האילוץ:

@Retention (RetentionPolicy.RUNTIME) @Constraint (validatedBy = {SerialNumber.Validator.class}) public @interface SerialNumber {הודעת מחרוזת () ברירת המחדל "מספר סידורי פירות אינו חוקי"; מחלקה [] קבוצות () ברירת מחדל {}; Class [] מטען מטען () ברירת מחדל {}; } 

לאחר מכן נגדיר את מחלקת המאמת SerialNumber. תוקף:

Validator בכיתה ציבורית מיישמת את ConstraintValidator {@Override Public void initialize (SerialNumber serial) {} @Override public boolean isValid (String serial, ConstraintValidatorContext constraintValidatorContext) {String serialNumRegex = "^ \ d {3} - \ \ d {3} \ d {4} $ "; Return Return.matches (serialNumRegex, serial); }} 

נקודת המפתח כאן היא מאמת הכיתה חייבת ליישם ConstraintValidator איפה ט הוא סוג הערך אותו אנו רוצים לאמת, במקרה שלנו א חוּט .

לבסוף, אנו מיישמים את לוגיקת האימות המותאם אישית שלנו ב- isValid שיטה.

5. אימות משאבים

יתר על כן, ממשק ה- API של אימות שעועית מאפשר לנו לאמת אובייקטים באמצעות ה- @תָקֵף ביאור.

בחלק הבא נסביר שתי דרכים שונות לאמת מחלקות משאבים באמצעות הערה זו:

  • ראשית, בקש אימות משאבים
  • שנית, אימות משאבי תגובה

נתחיל בהוספת ה- @Min ביאור שלנו פרי לְהִתְנַגֵד:

@XmlRootElement מחלקה ציבורית פירות {@Min (ערך = 10, הודעה = "משקל פרי חייב להיות 10 ומעלה") משקל שלם פרטי; // ...} 

5.1. בקש אימות משאבים

קודם כל, אנו נאפשר אימות באמצעות @תָקֵף בשלנו FruitResource מעמד:

@POST @ Path ("/ create") @ Consumes ("application / json") public void createFruit (@ Fruitalid Fruit Fruit) {SimpleStorageService.storeFruit (פירות); } 

בדוגמה שלעיל, אם ננסה ליצור פרי במשקל נמוך מ -10 נקבל שגיאת אימות.

5.2. אימות משאבי תגובה

כמו כן, בדוגמה הבאה נראה כיצד לאמת משאב תגובה:

@GET @Valid @Produces ("application / json") @Path ("/ search / {name}") ציבורי פרי findFruitByName (@PathParam ("שם") שם מחרוזת) {החזר SimpleStorageService.findByName (שם); }

שים לב, כיצד אנו משתמשים בו @תָקֵף ביאור. אך הפעם אנו משתמשים בו ברמת שיטת המשאב כדי להיות בטוחים שהתגובה תקפה.

6. מטפל חריגים בהתאמה אישית

בחלק האחרון נבדוק בקצרה כיצד ליצור מטפל חריג מותאם אישית. זה שימושי כאשר אנו רוצים להחזיר תגובה מותאמת אישית אם אנו מפרים אילוץ מסוים.

נתחיל בהגדרת שלנו FruitExceptionMapper:

מחלקה ציבורית FruitExceptionMapper מיישמת את ExceptionMapper {@Override Response Public toResponse (ConstraintViolationException exception) {return Response.status (Response.Status.BAD_REQUEST) .entity (prepareMessage (exception)) .type ("text / plain") .build (); } פרטי מחרוזת preparMessage (חריג ConstraintViolationException) {הודעה StringBuilder = StringBuilder חדש (); עבור (ConstraintViolation cv: exception.getConstraintViolations ()) {message.append (cv.getPropertyPath () + "" + cv.getMessage () + "\ n"); } להחזיר message.toString (); }}

ראשית, אנו מגדירים ספק מיפוי חריגים מותאם אישית. על מנת לעשות זאת, אנו מיישמים את ה- ExceptionMapper ממשק באמצעות ConstraintViolationException.

לפיכך, נראה שכאשר חריג זה נזרק ה להגיב יופעל השיטה של ​​מופע מיופה החריגים המותאם אישית שלנו.

כמו כן, בדוגמה פשוטה זו אנו חוזרים על כל ההפרות ומוסיפים כל נכס והודעה שיש לשלוח בתגובה.

לאחר מכן, על מנת להשתמש במפת החריגים המותאמים אישית שלנו עלינו לרשום את הספק שלנו:

@Override מוגן יישום להגדיר () {ViewApplicationConfig config = חדש ViewApplicationConfig (); config.register (FruitExceptionMapper.class); הגדרת תצורה; }

לבסוף, אנו מוסיפים נקודת סיום להחזרת פסול פרי כדי להציג את המטפל החריג בפעולה:

@GET @Produces (MediaType.TEXT_HTML) @Path ("/ exception") @ Valid public fruit exception () {Fruit fruit = Fruit new (); fruit.setName ("a"); fruit.setColour ("b"); להחזיר פירות; } 

7. מסקנה

לסיכום, במדריך זה חקרנו את הרחבה API של אימות שעועית ג'רזי.

ראשית, התחלנו להציג כיצד ניתן להשתמש ב- API של אימות שעועית בג'רזי. כמו כן, בדקנו כיצד להגדיר יישום אינטרנט לדוגמא.

לבסוף, בדקנו כמה דרכים לבצע אימות עם ג'רזי וכיצד לכתוב מטפל חריג מותאם אישית.

כמו תמיד, קוד המקור המלא של המאמר זמין באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found