כיצד לקרוא כותרות HTTP בבקרי REST באביב

1. הקדמה

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

ראשית, נשתמש ב- @RequestHeader ביאור לקרוא כותרות בנפרד, כמו גם כולם ביחד.

לאחר מכן, נסתכל עמוק יותר על ה- @RequestHeaderהתכונות.

2. גישה לכותרות HTTP

2.1. באופן אינדיבידואלי

אם אנו זקוקים לגישה לכותרת ספציפית, אנחנו יכולים להגדיר @RequestHeader עם שם הכותרת:

@GetMapping ("/ greeting") ברכת ResponseEntity פומבית (@RequestHeader ("accept-language") שפת מחרוזת) {// קוד המשתמש במשתנה השפה מחזיר ResponseEntity חדש (ברכה, HttpStatus.OK); }

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

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

@GetMapping ("/ double") ResponseEntity public doubleNumber (@RequestHeader ("my-number") int myNumber) {להחזיר ResponseEntity חדש (String.format ("% d * 2 =% d", myNumber, (myNumber * 2)) ), HttpStatus.OK); }

2.2. הכל בבת אחת

אם איננו בטוחים אילו כותרות יהיו, או שאנו זקוקים ליותר מכפי שאנו רוצים בחתימת השיטה שלנו, אנו יכולים להשתמש ב @RequestHeader ביאור ללא שם ספציפי.

יש לנו כמה אפשרויות לסוג המשתנה שלנו: א מַפָּה, א MultiValueMap או א HttpHeaders לְהִתְנַגֵד.

ראשית, בואו נקבל את כותרות הבקשה כ- מַפָּה:

@GetMapping ("/ listHeaders") תגובה תגובה ציבורית: HeadHeaders (@RequestHeader Map headers) {headers.forEach ((key, value) -> {LOG.info (String.format ("Header '% s' =% s", key) , ערך)); }); להחזיר ResponseEntity חדש (String.format ("% d headers ברשימה", headers.size ()), HttpStatus.OK); }

אם אנו משתמשים ב- מַפָּה ולאחד הכותרות יש יותר מערך אחד, נקבל רק את הערך הראשון. זה המקבילה לשימוש ב- getFirst שיטה על א MultiValueMap.

אם לכותרות שלנו יש מספר רב של ערכים, אנו יכולים להשיג אותם כ- MultiValueMap:

@GetMapping ("/ multiValue") ResponseEntity ציבורי multiValue (@RequestHeader כותרות MultiValueMap) {headers.forEach ((מפתח, ערך) -> LOG.info (String.format ("כותרת '% s' =% s", מפתח, value.stream (). collect (Collectors.joining ("); להחזיר ResponseEntity (String.format ("% d headers ", headers.size ()), HttpStatus.OK);}

אנחנו יכולים גם להשיג את הכותרות שלנו כמו HttpHeaders לְהִתְנַגֵד:

@GetMapping ("/ getBaseUrl") ResponseEntity ציבורי getBaseUrl (@RequestHeader כותרות HttpHeaders) {InetSocketAddress host = headers.getHost (); מחרוזת url = "//" + host.getHostName () + ":" + host.getPort (); להחזיר ResponseEntity חדש (String.format ("URL בסיסי =% s", url), HttpStatus.OK); }

ה HttpHeaders לאובייקט יש אביזרים לכותרות יישומים נפוצות.

כשאנחנו ניגשים לכותרת בשם a מַפָּה, MultiValueMap או ה HttpHeaders חפץ, נקבל ריק אם זה לא קיים.

3. @RequestHeader תכונות

כעת לאחר שעברנו את היסודות של גישה לכותרות הבקשה באמצעות ה- @RequestHeader ביאור, בואו נסתכל מקרוב על התכונות שלו.

כבר השתמשנו ב- שֵׁם אוֹ ערך תכונות באופן מרומז כאשר אנו שמנו במפורש את הכותרת שלנו:

ברכת תגובה ציבורית (ResponseHeader ("accept-language") שפת מחרוזת) {}

אנו יכולים להשיג את אותו הדבר באמצעות ה- שֵׁם תְכוּנָה:

ברכה לתגובה ציבורית תגובה (@RequestHeader (name = "accept-language") שפת מחרוזת) {}

לאחר מכן, בואו נשתמש ב- ערך תכונה בדיוק באותה דרך:

ברכת תגובה תגובה ציבורית (@RequestHeader (value = "accept-language") שפת מחרוזת) {}

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

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

@GetMapping ("/ nonRequiredHeader") ResponseEntity public evaluNonRequiredHeader (@RequestHeader (value = "header optional", required = false) String optionalHeader) {להחזיר ResponseEntity חדש (String.format ("האם הכותרת האופציונלית הייתה קיימת?% S!" , (optionalHeader == null? "לא": "כן")), HttpStatus.OK); }

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

בואו נשתמש ב- ערך ברירת מחדל תכונה כדי לספק ערך ברירת מחדל לכותרת שלנו:

@GetMapping ("/ ברירת מחדל") ResponseEntity ציבור evaluDefaultHeaderValue (@RequestHeader (value = "option-header", defaultValue = "3600") int optionalHeader) {להחזיר ResponseEntity חדש (String.format ("כותרת אופציונלית היא% d", optionalHeader ), HttpStatus.OK); }

4. מסקנה

במדריך קצר זה למדנו כיצד לגשת לכותרות בקשות בבקרי REST של אביב. ראשית, השתמשנו ב- @RequestHeader ביאור לספק כותרות בקשה לשיטות הבקר שלנו.

לאחר מבט בסיסי, התבוננו מפורט בתכונות ה- @RequestHeader ביאור.

קוד הדוגמה זמין ב- GitHub.


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