אביב הערות @ 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.


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