שגיאת נתיב תצוגה מעגלית

1. הקדמה

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

2. תלות

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

 org.springframework.boot spring-boot-starter-web 

3. שחזור הבעיה

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

מחלקה ציבורית @ Controller CircularViewPathController {@ GetMapping ("/ path") ציבורי מחרוזת () {return "path"; }}

ערך ההחזרה הוא שם התצוגה שייצור נתוני תגובה. במקרה שלנו, ערך ההחזר הוא נָתִיב אשר מזוהה עם path.html תבנית:

  path.html 

path.html

לאחר הפעלת השרת, אנו יכולים לשחזר את השגיאה על ידי הגשת בקשה ל- GET // localhost: 8080 / path. התוצאה תהיה שגיאת נתיב התצוגה המעגלית:

{"חותמת זמן": "2020-05-22T11: 47: 42.173 + 0000", "status": 500, "error": "שגיאת שרת פנימית", "הודעה": "נתיב תצוגה מעגלי [נתיב]: ישלח בחזרה לכתובת ה- URL הנוכחית של המטפל [/ path] שוב. בדוק את הגדרת ViewResolver! (רמז: יתכן ותוצאה של תצוגה לא מוגדרת, עקב יצירת שם תצוגת ברירת המחדל.) "," path ":" / path "} 

4. פתרונות

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

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

@Controller מחלקה ציבורית CircularViewPathController {@GetMapping ("/ path") נתיב מחרוזת ציבורי () {return "path2"; }}

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

עבור המקרים הנפוצים ביותר, אנו יכולים לבחור במנוע תבנית Java של Thymeleaf. בואו נוסיף את אביב-אתחול-התחלה-טימילית תלות בפרויקט:

 org.springframework.boot spring-boot-starter-thymeleaf 

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

5. מסקנה

במדריך זה בדקנו את שגיאת הנתיב Circular View, מדוע זה קורה וכיצד לפתור את הבעיה. כמו תמיד, קוד המקור המלא של המאמר זמין באתר GitHub.


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