אביב @ ביאור פתילי

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

במדריך מהיר זה נחקור את האביב @ PathVariable ביאור.

פשוט שים, ה @ PathVariable ניתן להשתמש בהערה לטיפול במשתני תבניות במיפוי URI לבקשה, והשתמש בהם כפרמטרים של שיטה.

בואו נראה כיצד להשתמש @ PathVariable ותכונותיו השונות.

2. מיפוי פשוט

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

@GetMapping ("/ api / workers / {id}") @ResponseBody מחרוזת ציבורית getEmployeesById (@PathVariable מזהה מחרוזת) {return "ID:" + id; }

בדוגמה זו אנו משתמשים @ PathVariable ביאור לחילוץ החלק התבנית של ה- URI המיוצג על ידי המשתנה {תְעוּדַת זֶהוּת}.

פשוט קבל בקשה ל / API / עובדים / {id} יפעל getEmployeesById עם ערך מזהה שחולץ:

// localhost: 8080 / api / עובדים / 111 ---- מזהה: 111

עכשיו, בואו ונחקור את ההערה הזו ונבדוק את התכונות שלה.

3. ציון שם משתנה הנתיב

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

עם זאת, אם שם המשתנה של הנתיב שונה, אנו יכולים לציין אותו בטיעון ה- @ PathVariable ביאור:

@GetMapping ("/ api / workerswithvariable / {id}") @ResponseBody מחרוזת ציבורית getEmployeesByIdWithVariableName (@PathVariable ("id") מחרוזת עובד) {return "ID:" + עובדId; }
// localhost: 8080 / api / workerswithvariable / 1 ---- מזהה: 1

אנו יכולים גם להגדיר את שם המשתנה של הנתיב כ- @ PathVariable (value = "id") במקום PathVariable ("id") לבהירות.

4. משתני נתיבים מרובים בבקשה אחת

תלוי במקרה השימוש, אנו יכולים לקבל יותר ממשתנה נתיב אחד ב- URI של בקשתנו לשיטת בקר, הכוללת גם מספר פרמטרים לשיטה:

@GetMapping ("/ api / workers / {id} / {name}") @ResponseBody Public String getEmployeesByIdAndName (@PathVariable מזהה מחרוזת, @PathVariable שם מחרוזת) {return "ID:" + id + ", name:" + name ; }
// localhost: 8080 / api / עובדים / 1 / bar ---- מזהה: 1, שם: bar

אנו יכולים להתמודד גם עם יותר מאחד @ PathVariable פרמטרים באמצעות פרמטר שיטה מסוג java.util.Map:

@GetMapping ("/ api / workerswithmapvariable / {id} / {name}") @ResponseBody Public String getEmployeesByIdAndNameWithMapVariable (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); שם מחרוזת = pathVarsMap.get ("שם"); אם (id! = null && name! = null) {return "ID:" + id + ", name:" + name; } אחר {החזר "חסרים פרמטרים"; }}
// localhost: 8080 / api / עובדים / 1 / bar ---- מזהה: 1, שם: bar

יש, עם זאת, תפיסה קטנה בזמן הטיפול במספר @PathVariable פרמטרים כאשר מחרוזת משתנה הנתיב מכילה תו נקודה (.). דנו כאן בפרטי מקרים פינתיים אלה.

5. משתני נתיב אופציונליים

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

@GetMapping (value = {"/ api / workerswithrequired", "/ api / workerswithrequired / {id}"}) @ResponseBody String מחרוזת getEmployeesByIdWithRequired (@PathVariable מזהה מחרוזת) {החזרת "מזהה:" + id; }

לפי איך זה נראה, הבקר לעיל צריך להתמודד עם שניהם / api / עובדים ללא צורך ו / api / workerswithrequired / 1 נתיבי בקשה. אבל, מכיוון שפרמטרים של שיטה הוסרו על ידי @ PathVariables הם חובה כברירת מחדל, היא לא מטפלת בבקשות שנשלחות אליהם / api / עובדים ללא צורך נָתִיב:

// localhost: 8080 / api / workerswithrequired ---- {"timestamp": "2020-07-08T02: 20: 07.349 + 00: 00", "status": 404, "error": "לא נמצא", " message ":" "," path ":" / api / workerswithrequired "}  // localhost: 8080 / api / workerswithrequired / 1 ---- מזהה: 111

אנו יכולים להתמודד עם זה בשתי דרכים.

5.1. הגדרה @ PathVariable כלא נדרש

אנחנו יכולים להגדיר את נדרש רכוש של @ PathVariable ל שֶׁקֶר כדי להפוך אותו לאופציונלי. לפיכך, בשינוי הדוגמה הקודמת שלנו, אנו יכולים כעת להתמודד עם גרסאות ה- URI עם ובלי משתנה הנתיב:

@GetMapping (value = {"/ api / workerswithrequiredfalse", "/ api / workerswithrequiredfalse / {id}"}) @ResponseBody מחרוזת ציבורית getEmployeesByIdWithRequiredFalse (@PathVariable (חובה = שקר) מזהה מחרוזת) {if (id! = Null) { להחזיר "ID:" + id; } אחר {להחזיר "חסר מזהה"; }}
// localhost: 8080 / api / עובדים ללא צורך שקר ---- חסר תעודת זהות

5.2. באמצעות java.util. אופציונלי

מאז אביב 4.1, אנו יכולים גם להשתמש java.util. אופציונלי (זמין ב- Java 8+) לטיפול במשתנה נתיב שאינו חובה:

@GetMapping (value = {"/ api / workerswithoptional", "/ api / workerswithoptional / {id}"}) @ResponseBody מחרוזת ציבורית getEmployeesByIdWithOptional (@PathVariable מזהה אופציונלי) {if (id.isPresent ()) {return "ID: "+ id.get (); } אחר {להחזיר "חסר מזהה"; }}

עכשיו, אם לא נציין את משתנה הנתיב תְעוּדַת זֶהוּת בבקשה, אנו מקבלים את תגובת ברירת המחדל:

// localhost: 8080 / api / workerswithoptional ---- חסר מזהה 

5.3. באמצעות פרמטר שיטה מסוג מַפָּה

כפי שמוצג קודם, אנו יכולים להשתמש בפרמטר שיטה יחיד מסוגו java.util.Map לטיפול בכל משתני הנתיב ב- URI של הבקשה. אנו יכולים גם להשתמש באסטרטגיה זו כדי לטפל במקרה של משתני נתיב אופציונליים:

@GetMapping (value = {"/ api / workerswithmap / {id}", "/ api / workerswithmap"}) @ResponseBody מחרוזת ציבורית getEmployeesByIdWithMap (@PathVariable Map pathVarsMap) {id String = pathVarsMap.get ("id"); אם (id! = null) {return "ID:" + id; } אחר {להחזיר "חסר מזהה"; }}

6. ערך ברירת מחדל עבור @ PathVariable

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

למשל, שימוש java.util. אופציונליאנו יכולים לזהות אם משתנה הנתיב הוא ריק או שלא. אם זה ריק אז אנחנו יכולים לענות לבקשה עם ערך ברירת מחדל:

@GetMapping (value = {"/ api / defaultemployeeswithoptional", "/ api / defaultemployeeswithoptional / {id}"}) @ResponseBody מחרוזת ציבורית getDefaultEmployeesByIdWithOptional (@PathVariable מזהה אופציונלי) {if (id.isPresent ()) {return "ID: "+ id.get (); } אחר {return "ID: עובד ברירת מחדל"; }}

7. מסקנה

במאמר זה דנו כיצד להשתמש ב- Spring @ PathVariable ביאור. זיהינו גם את הדרכים השונות לשימוש יעיל ב @ PathVariable הערה שתתאים למקרי שימוש שונים כגון פרמטרים אופציונליים והתמודדות עם ערכי ברירת מחדל.

דוגמת הקוד המוצגת במאמר זה זמינה גם ב- Github.