הערות בקשת האביב והתגובה של אביב

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.