אתחול האביב: התאמה אישית של דף שגיאת תווית לבנה

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

במאמר זה נבחן כיצד לעשות זאת השבת והתאם אישית את דף שגיאות ברירת המחדל עבור יישום Spring Boot שכן טיפול נכון בשגיאות מתאר מקצועיות ועבודה איכותית.

2. השבתת דף שגיאת התווית הלבנה

ראשית, בואו נראה כיצד נוכל להשבית את דף השגיאה של התווית הלבנה לחלוטין על ידי הגדרת ה- server.error.whitelabel.enabled נכס ל שֶׁקֶר:

server.error.whitelabel.enabled = שקר

הוספת ערך זה לקובץ application.properties תשבית את דף השגיאה ותציג דף תמציתי שמקורו במיכל היישום הבסיסי, למשל, Tomcat.

אנו יכולים להשיג את אותה התוצאה על ידי אי הכללה של ErrorMvcAutoConfiguration אפונה. אנו יכולים לעשות זאת על ידי הוספת ערך זה לקובץ המאפיינים:

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration # for Spring Boot 2.0 # spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

או על ידי הוספת הערה זו למעמד הראשי:

@EnableAutoConfiguration (exclude = {ErrorMvcAutoConfiguration.class})

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

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

3. הצגת דפי שגיאה בהתאמה אישית

ראשית עלינו ליצור דף שגיאות HTML מותאם אישית.

נשמור את הקובץ כ- error.html מאז שאנחנו משתמשים טימילף מנוע תבנית:

המהנדסים שלנו בעניין

לך הביתה

אם נשמור את הקובץ ב משאבים / תבניותבספרייה, זה ייאסף אוטומטית כברירת מחדל של Spring Boot BasicErrorController.

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

אנו יכולים להיות ספציפיים יותר על ידי מתן שם לקובץ עם קוד סטטוס ה- HTTP שאנו רוצים להשתמש בו למשל. שמירת הקובץ בשם 404.html ב משאבים / תבניות / שגיאה פירושו שהוא ישמש במפורש לשגיאות 404.

3.1. תחפושת ErrorController

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

לזה, עלינו ליצור מחלקה שמיישמת את ErrorController מִמְשָׁק ולדרוס את שלה getErrorPath () שיטה להחזרת נתיב מותאם אישית להתקשרות כאשר אירעה שגיאה.

עם זאת, החל מגרסת 2.3.x, Spring Boot ביטל את השיטה הזו ואת המאפיין server.error.path יש להשתמש במקום זאת כדי לציין את הנתיב המותאם אישית.

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

@Controller מחלקה ציבורית MyErrorController מיישם ErrorController {@RequestMapping ("/ error") ציבורי מחרוזת handleError () {// לעשות משהו כמו רישום להחזיר "שגיאה"; } @Override מחרוזת ציבורית getErrorPath () {return null; }}

בקטע הקוד שלמעלה אנו מציינים גם את הכיתה @בקר וליצור מיפוי לנתיב שמוגדר כמאפיין server.error.path:

server.error.path = / שגיאה

בדרך זו הבקר יכול לטפל בשיחות אל /שְׁגִיאָה נָתִיב.

בתוך ה handleError (), אנו מחזירים את דף השגיאה המותאם אישית שיצרנו קודם. אם אנו מפעילים שגיאת 404 כעת, הדף המותאם אישית שלנו יוצג.

בואו נשפר עוד יותר את handleError () כדי להציג דפי שגיאה ספציפיים עבור סוגי שגיאות שונים.

לדוגמא, נוכל לקבל דפים שתוכננו יפה במיוחד עבור סוגי שגיאות 404 ו -500. אז נוכל להשתמש בקוד מצב HTTP של השגיאה כדי לקבוע דף שגיאה מתאים להצגה:

@RequestMapping ("/ error") ציבורי מחרוזת handleError (HttpServletRequest בקשה) {Object status = request.getAttribute (RequestDispatcher.ERROR_STATUS_CODE); אם (status! = null) {Integer statusCode = Integer.valueOf (status.toString ()); אם (statusCode == HttpStatus.NOT_FOUND.value ()) {להחזיר "error-404"; } אחר אם (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value ()) {להחזיר "שגיאה 500"; }} להחזיר "שגיאה"; }

ואז, עבור שגיאת 404, למשל, נראה את error-404.html עמוד:

4. מסקנה

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

כמו תמיד, קוד המקור השלם זמין ב- Github.