באמצעות Spring @ResponseStatus להגדרת קוד סטטוס HTTP

1. הקדמה

באביב MVC, יש לנו דרכים רבות לעשות זאת הגדר את קוד הסטטוס של תגובת HTTP.

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

2. על שיטות בקר

כאשר נקודת קצה חוזרת בהצלחה, Spring מספק תגובה HTTP 200 (OK).

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

@ResponseStatus (HttpStatus.I_AM_A_TEAPOT) void teaPot () {}

כאשר אנו רוצים לאותת על שגיאה, אנו יכולים לספק הודעת שגיאה דרך ה- סיבה טַעֲנָה:

@ResponseStatus (HttpStatus.BAD_REQUEST, סיבה = "חלק מהפרמטרים אינם תקפים") בטל ב- IllegalArgumentException (חריג IllegalArgumentException) {}

שים לב, שכאשר אנו קובעים סיבה, אביב קורא HttpServletResponse.sendError (). לכן, זה ישלח דף שגיאות HTML ללקוח, מה שהופך אותו לכושר רע לנקודות הקצה של REST.

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

3. עם מטפלי שגיאות

יש לנו שלוש דרכים להשתמש @ תגובה סטטוס להמיר יוצא מן הכלל לסטטוס תגובת HTTP:

  • באמצעות @ExceptionHandler
  • באמצעות @ControllerAdvice
  • סימון ה יוצא מן הכלל מעמד

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

אנחנו יכולים להשתמש @ תגובה סטטוס בשיטות אלה לטיפול בשגיאות באותו אופן שעשינו בשיטות MVC רגילות בסעיף הקודם.

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

מחלקה @ResponseStatus (code = HttpStatus.BAD_REQUEST) CustomException מרחיב RuntimeException {}

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

שים לב שכאשר אנו מסמנים יוצא מן הכלל כיתה עם @ תגובה סטטוס, האביב תמיד מתקשר HttpServletResponse.sendError (), אם קבענו סיבה או שלא.

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

4. מסקנה

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

כרגיל, הדוגמאות זמינות ב- GitHub.


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