כיצד להגדיר כותרת עליונה לתגובה עם אביב 5

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

במדריך המהיר הזה, נעבור דרכים שונות להגדרת כותרת בתגובת שירות, או עבור נקודות קצה שאינן תגובתיות או עבור ממשקי API המשתמשים במסגרת ה- WebFlux של Spring 5.

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

2. כותרות לרכיבים שאינם מגיבים

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

מצד שני, אם המטרה שלנו היא להוסיף מסנן לכל התגובות או למספר רב, נצטרך להגדיר a לְסַנֵן.

2.1. באמצעות HttpServletResponse

אנחנו פשוט צריכים להוסיף את HttpServletResponse התנגד לנקודת הקצה של REST כטענה, ואז השתמש ב- addHeader () שיטה:

@GetMapping ("/ http-servlet-response") מחרוזת ציבורית באמצעות HttpServletResponse (HttpServletResponse תגובה) {response.addHeader ("Baeldung-Example-Header", "Value-HttpServletResponse"); להחזיר "תגובה עם כותרת באמצעות HttpServletResponse"; }

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

2.2. באמצעות תגובה תגובה

במקרה זה, בואו נשתמש ב- בונה גוף המסופק על ידי תגובה תגובה מעמד:

@GetMapping ("/ response-entity-builder-with-http-headers") Public ResponseEntity usingResponseEntityBuilderAndHttpHeaders () {HttpHeaders responseHeaders = HttpHeaders חדשים (); responseHeaders.set ("Baeldung-Example-Header", "Value-ResponseEntityBuilderWithHttpHeaders"); החזר ResponseEntity.ok () .headers (responseHeaders) .body ("תגובה עם כותרת באמצעות ResponseEntity"); }

ה HttpHeaders class מציע שיטות נוחות רבות להגדרת הכותרות הנפוצות ביותר.

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

2.3. הוספת כותרת לכל התגובות

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

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

גישה טובה יותר להשיג זאת היא על ידי הגדרת תצורה א לְסַנֵן בשירות שלנו:

@WebFilter ("/ filter-response-header / *") מחלקה ציבורית AddResponseHeaderFilter מיישם את המסנן {@Override public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) זורק IOException, ServletException {HttpServletResponse httpServletResponse = תגובה; httpServletResponse.setHeader ("Baeldung-Example-Filter-Header", "Value-Filter"); chain.doFilter (בקשה, תגובה); } @Override public void init (FilterConfig filterConfig) זורק ServletException {// ...} @Override public public ריק להרוס () {// ...}}

ה @WebFilter ביאור מאפשר לנו לציין את urlPatterns בשביל זה זה לְסַנֵן יהפוך ליעיל.

כפי שציינו במאמר זה, על מנת להפוך את שלנו לְסַנֵן נגלה על ידי האביב, עלינו להוסיף את @ ServletComponentScan ביאור לשיעור בקשת האביב שלנו:

@ServletComponentScan @ SpringBootApplication כיתה ציבורית ResponseHeadersApplication {public static void main (String [] args) {SpringApplication.run (ResponseHeadersApplication.class, args); }}

אנו יכולים להימנע משלב אחרון זה אם איננו זקוקים לאף אחת מהפונקציות המסופקות על ידי @WebFilter, באמצעות @רְכִיב ביאור שלנו לְסַנֵן בכיתה במקום.

3. כותרות לנקודות קצה תגובתיות

שוב נראה כיצד להגדיר כותרות על תגובות נקודות קצה בודדות באמצעות ServerHttpResponse, תגובה תגובה אוֹ תגובת שרת (לנקודות קצה פונקציונליות) שיעורים וממשקים.

נלמד גם כיצד ליישם אביב 5 WebFilter כדי להוסיף כותרת על כל התגובות שלנו.

3.1. באמצעות ServerHttpResponse

גישה זו דומה למדי ל HttpServletResponse עָמִית:

@GetMapping ("/ server-http-response") מונו ציבורי באמצעות ServerHttpResponse (ServerHttpResponse response) {respons.getHeaders (). הוסף ("Baeldung-Example-Header", "Value-ServerHttpResponse"); החזר Mono.just ("תגובה עם כותרת באמצעות ServerHttpResponse"); }

3.2. באמצעות תגובה תגובה

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

@GetMapping ("/ response-entity") מונו ציבורי usingResponseEntityBuilder () {String responseHeaderKey = "Baeldung-Example-Header"; String responseHeaderValue = "Value-ResponseEntityBuilder"; String responseBody = "תגובה עם כותרת באמצעות ResponseEntity (בונה)"; החזר Mono.just (ResponseEntity.ok () .header (responseHeaderKey, responseHeaderValue) .body (responseBody)); }

3.3. באמצעות תגובת שרת

ניתן להשתמש בשיעורים ובממשקים שהוצגו בשני חלקי המשנה האחרונים @בקר שיעורים מבוארים אך אינם מתאימים למסגרת האינטרנט הפונקציונלית החדשה של Spring 5.

אם אנחנו רוצים להגדיר כותרת עליונה על HandlerFunction ואז נצטרך לשים את היד על תגובת שרתמִמְשָׁק:

mono publicHandler מונו (בקשה אחרונה של ServerRequest) {return ServerResponse.ok () .header ("Baeldung-Example-Header", "Value-Handler") .body (Mono.just ("תגובה עם כותרת באמצעות Handler"), מחרוזת. מעמד); }

3.4. הוספת כותרת לכל התגובות

לבסוף, אביב 5 מספק א WebFilter מִמְשָׁקכדי להגדיר כותרת על כל התגובות אוחזר על ידי שירות:

המחלקה הציבורית @Component AddResponseHeaderWebFilter מיישמת את WebFilter {@Override Public Mono filter (ServerWebExchange Exchange, WebFilterChain chain) {exchange.getResponse () .getHeaders () .add ("Baeldung-Example-Filter-Header", "Value-Filter"); החזרת chain.filter (החלפה); }}

4. מסקנה

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

כמו תמיד, ניתן לגשת לכל הדוגמאות במאגר Github שלנו, הן אלה שאינם מגיבים והן אלה המשתמשים בפונקציונליות ספציפית של Spring 5.


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