הערות בקשת האביב והתגובה של אביב
1. הקדמה
במדריך מהיר זה אנו מספקים סקירה תמציתית של האביב @ בקשת גוף ו @ResponseBody ביאורים.
2. @ בקשת גוף
פשוט שים, ה @ בקשת גוף הערות ממפות את HttpRequest גוף לאובייקט העברה או תחום, מה שמאפשר התנקות אוטומטית של הנכנסים HttpRequest גוף על אובייקט ג'אווה.
ראשית, בואו נסתכל על שיטת בקר אביב:
@PostMapping ("/ בקשה") תגובה שליטה תגובה ציבורית (@RequestBody LoginForm loginForm) {exampleService.fakeAuthenticate (loginForm); החזר ResponseEntity.ok (HttpStatus.OK); }
אביב מוריד אוטומטית את ה- JSON לסוג Java, בהנחה שצוין אחד מתאים.
כברירת מחדל, הסוג שאנו מציינים עם ה- @ בקשת גוף ההערה חייבת להתאים ל- JSON שנשלח מבקר צד הלקוח שלנו:
כיתת ציבור LoginForm {שם משתמש פרטי מחרוזת; סיסמת מחרוזת פרטית; // ...}
הנה, האובייקט שאנו משתמשים בו כדי לייצג את HttpRequest מפות הגוף שלנו LoginForm לְהִתְנַגֵד.
בואו נבדוק זאת באמצעות CURL:
תלתל -i \ -H "קבל: יישום / json" \ -H "סוג תוכן: יישום / json" \ -X POST - נתונים '{"שם משתמש": "ג'וני", "סיסמה": "סיסמה"} '"//localhost:8080/.../quest"
זה כל מה שאנחנו צריכים עבור ממשק API של REST Spring ולקוח Angular המשתמש ב- @RequestBody ביאור.
3. @ResponseBody
ה @ResponseBody ההערה מספרת לבקר שהאובייקט שהוחזר מסודר אוטומטית ל- JSON ומועבר חזרה ל- HttpResponse לְהִתְנַגֵד.
נניח שיש לנו מנהג תְגוּבָה לְהִתְנַגֵד:
Class class ResponseTransfer {טקסט מחרוזת פרטי; // סטנדרטים / סטרים סטנדרטיים}
לאחר מכן, ניתן ליישם את הבקר המשויך:
@Controller @RequestMapping ("/ post") מחלקה ציבורית ExamplePostController {@Autowired ExampleService exampleService; @ PostMapping ("/ תגובה") @ ResponseBody פומבית תגובה העברה פוסט תגובה פונה (@ תגובה RequestBody LoginForm loginForm) {להחזיר ResponseTransfer חדש ("תודה על הפרסום !!!"); }}
במסוף המפתחים של הדפדפן שלנו או באמצעות כלי כמו דואר, אנו יכולים לראות את התגובה הבאה:
{"text": "תודה על הפרסום !!!"}
זכור, איננו צריכים להוסיף הערות על @ RestController-מסומנים בקרים עם ה- @ResponseBody ביאור מאז אביב עושה זאת כברירת מחדל.
3.1. הגדרת סוג התוכן
כאשר אנו משתמשים ב- @ResponseBody ביאור, אנו עדיין יכולים להגדיר במפורש את סוג התוכן שהשיטה שלנו מחזירה.
בשביל זה, אנחנו יכולים להשתמש ב- @ בקשת מיפוישל מייצר תְכוּנָה. שים לב שהערות כמו @ פוסט מיפוי, @GetMappingוכו 'מגדירים כינויים עבור פרמטר זה.
בואו כעת להוסיף נקודת קצה חדשה ששולחת תגובת JSON:
@PostMapping (value = "/ content", מייצר = MediaType.APPLICATION_JSON_VALUE) @ResponseBody תגובה תגובה העברה postResponseJsonContent (@RequestBody LoginForm loginForm) {החזר ResponseTransfer חדש ("תוכן JSON!"); }
בדוגמה השתמשנו ב- MediaType.APPLICATION_JSON_VALUE קָבוּעַ. לחלופין, אנו יכולים להשתמש יישום / json באופן ישיר.
לאחר מכן, בואו נשתמש בשיטה חדשה, ממופה לאותה /תוֹכֶן נתיב, אך במקום להחזיר תוכן XML:
@PostMapping (value = "/ content", מייצר = MediaType.APPLICATION_XML_VALUE) @ ResponseBody ציבורי תגובה העבר postResponseXmlContent (@RequestBody LoginForm loginForm) {החזר ResponseTransfer חדש ("תוכן XML!"); }
עַכשָׁיו, תלוי בערך של לְקַבֵּל הפרמטר שנשלח בכותרת הבקשה, נקבל תגובות שונות.
בואו נראה את זה בפעולה:
תלתל -i \ -H "קבל: יישום / json" \ -H "סוג תוכן: יישום / json" \ -X POST - נתונים '{"שם משתמש": "ג'וני", "סיסמה": "סיסמה"} '"//localhost:8080/.../content"
הפקודה CURL מחזירה תגובת JSON:
HTTP / 1.1 200 סוג תוכן: application / json קידוד העברה: chunked תאריך: Thu, 20 Feb 2020 19:43:06 GMT {"text": "JSON Content!"}
עכשיו בואו נשנה את לְקַבֵּל פָּרָמֶטֶר:
תלתל -i \ -H "קבל: יישום / xml" \ -H "סוג תוכן: יישום / json" \ -X POST - נתונים '{"שם משתמש": "ג'וני", "סיסמה": "סיסמה"} '"//localhost:8080/.../content"
כצפוי, אנו מקבלים תוכן XML הפעם:
HTTP / 1.1 200 סוג תוכן: יישום / xml קידוד העברה: chunked תאריך: Thu, 20 Feb 2020 19:43:19 GMT תוכן XML!
4. מסקנה
בנינו לקוח Angular פשוט לאפליקציית Spring המדגים כיצד להשתמש ב- @ בקשת גוף ו @ResponseBody ביאורים.
בנוסף, הראינו כיצד להגדיר סוג תוכן בעת השימוש @ResponseBody.
כמו תמיד, דוגמאות קוד זמינות ב- GitHub.