אביב הערות @ RequestParam לעומת @ PathVariable
1. סקירה כללית
במדריך מהיר זה נחקור את ההבדלים בין האביב @RequestParam ו @ PathVariable ביאורים.
@RequestParam ו @ PathVariable ניתן להשתמש בשניהם כדי לחלץ ערכים מ- URI של הבקשה, אך הם שונים במקצת.
2. פרמטר שאילתה לעומת נתיב URI
בזמן @RequestParams לחלץ ערכים ממחרוזת השאילתה, @ PathVariables לחלץ ערכים מנתיב ה- URI:
@GetMapping ("/ foos / {id}") @ResponseBody מחרוזת ציבורית getFooById (@PathVariable מזהה מחרוזת) {return "ID:" + id; }
לאחר מכן נוכל למפות על סמך הנתיב:
// localhost: 8080 / foos / abc ---- מזהה: abc
ועבור @RequestParam, זה יהיה:
@GetMapping ("/ foos") @ResponseBody מחרוזת ציבורית getFooByIdUsingQueryParam (מזהה מחרוזת @RequestParam) {החזרת "מזהה:" + id; }
מה שייתן לנו את אותה התגובה, פשוט URI שונה:
// localhost: 8080 / foos? id = abc ---- ID: abc
3. מקודד לעומת ערך מדויק
כי @ PathVariable הוא חילוץ ערכים מנתיב ה- URI, הוא לא מקודד. מצד שני, @RequestParam הוא.
באמצעות הדוגמה הקודמת, ab + c יחזור כמו שהוא:
// localhost: 8080 / foos / ab + c ---- מזהה: ab + c
אלא בשביל a @ RequestParam בקשה, הפרמטר מפוענח לכתובת האתר:
// localhost: 8080 / foos? id = ab + c ---- ID: ab c
4. ערכים אופציונליים
שניהם @RequestParam ו @ PathVariable יכול להיות אופציונלי.
אנחנו יכולים לעשות @ PathVariable אופציונלי באמצעות נדרש מאפיין החל באביב 4.3.3:
@GetMapping ({"/ myfoos / optional", "/ myfoos / optional / {id}"}) @ResponseBody Public String getFooByOptionalId (@PathVariable (required = false) מזהה מחרוזת) {return "ID:" + id; }
מה שאנו יכולים לעשות גם:
// localhost: 8080 / myfoos / אופציונלי / abc ---- מזהה: abc
אוֹ:
// localhost: 8080 / myfoos / אופציונלי ---- מזהה: null
ל @RequestParam, אנו יכולים גם להשתמש ב- נדרש תְכוּנָה.
ציין זאת עלינו להיות זהירים בעת ביצוע @ PathVariable אופציונלי, כדי למנוע התנגשויות בנתיבים.
5. מסקנה
במאמר זה למדנו את ההבדלים בין @RequestParam ו @ PathVariable.
קוד המקור המלא של הדוגמאות ניתן למצוא באתר GitHub.