פרמטרים של JSON עם MVC קפיץ

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

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

ראשית, נתחיל עם מעט רקע בפרמטרים של JSON. לאחר מכן, נרד בחור הארנב כדי לראות כיצד לשלוח פרמטרים של JSON בבקשות POST ו- GET.

2. פרמטרים של JSON ב- MVC באביב

השימוש ב- JSON לשליחה או לקבל נתונים הוא נוהג נפוץ בקרב מפתחי אתרים. המבנה ההיררכי של מיתרי JSON מציע דרך קומפקטית וקריאה יותר לאדם לייצג פרמטרים של בקשות HTTP.

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

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

3. שלח נתוני JSON ב- POST

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

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

עכשיו, בואו נראה איך לשלוח נתוני JSON באמצעות בקשת POST באביב MVC.

ראשית, עלינו ליצור אובייקט מודל שייצג את נתוני JSON שהועברו. לדוגמה, שקול את מוצר מעמד:

מוצר בכיתה ציבורית {מזהה פרטי פרטי; שם מחרוזת פרטי; מחיר כפול פרטי; // קונסטרוקטור ברירת מחדל + גטררים + סטרים}

שנית, בואו נגדיר שיטת מטפל באביב שמקבלת בקשות POST:

@PostMapping ("/ create") @ResponseBody מוצר ציבורי createProduct (@RequestBody מוצר מוצר) {// מוצר החזרת לוגיקה מותאמת אישית; }

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

כעת נוכל לבדוק את בקשת ה- POST שלנו באמצעות cURL:

תלתל -i \ -H "קבל: יישום / json" \ -H "סוג תוכן: יישום / json" \ -X POST - נתונים \ '{"id": 1, "name": "Asus Zenbook", "price": 800} '"// localhost: 8080 / spring-mvc-basics-4 / products / create"

4. שלח פרמטר JSON ב- GET

אביב MVC מציע @RequestParam כדי לחלץ פרמטרים של שאילתות מבקשות GET. עם זאת, בניגוד @RequestBody, ה @RequestParam ביאור תומך רק בסוגי נתונים פשוטים כגון int ו חוּט.

לכן, כדי לשלוח JSON, נצטרך להגדיר את פרמטר JSON שלנו כמחרוזת פשוטה.

השאלה הגדולה כאן היא: כיצד אנו ממירים את פרמטר JSON שלנו (שהוא a חוּט) לאובייקט של מוצר מעמד?

התשובה די פשוטה! ה ObjectMapper המחלקה הניתנת על ידי ספריית ג'קסון מציעה דרך גמישה להמיר מחרוזות JSON לאובייקטים של Java.

עכשיו, בואו נראה איך לשלוח פרמטר JSON באמצעות בקשת GET ב- Spring MVC. ראשית, נצטרך ליצור שיטת מטפל נוספת בבקר שלנו לטיפול בקשות GET:

@GetMapping ("/ get") @ResponseBody מוצר ציבורי getProduct (@RequestParam String product) זורק את JsonMappingException, JsonProcessingException {Product prod = objectMapper.readValue (product, Product.class); תוצרת חזרה; }

כפי שמוצג לעיל, readValue () השיטה מאפשרת לערוק מחדש את הפרמטר JSON מוצר ישירות למופע של מוצר מעמד.

שים לב שאנו מגדירים את פרמטר שאילתת JSON שלנו כ- חוּט לְהִתְנַגֵד. עכשיו, מה אם נרצה להעביר א מוצר אובייקט כמו שעשינו בעת השימוש @ בקשת גוף?

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

ראשון, נצטרך ליצור עורך מאפיינים מותאם אישית שיכלול את ההיגיון של המרת הפרמטר JSON שניתן כ- חוּט אל א מוצר לְהִתְנַגֵד:

מחלקה ציבורית ProductEditor מרחיב את PropertyEditorSupport {ObjectMapper הפרטי ObjectMapper; ProductEditor ציבורי (ObjectMapper objectMapper) {this.objectMapper = objectMapper; } @Override בטל פומבי setAsText (טקסט מחרוזת) זורק IllegalArgumentException {if (StringUtils.isEmpty (text)) {setValue (null); } אחר {מוצר מוצר = מוצר חדש (); נסה {prod = objectMapper.readValue (טקסט, Product.class); } לתפוס (JsonProcessingException e) {לזרוק IllegalArgumentException חדש (e); } setValue (prod); }}}

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

@GetMapping ("/ get2") @ResponseBody מוצר ציבורי get2Product (מוצר מוצר @RequestParam) {// מוצר החזרת לוגיקה מותאמת אישית; }

לבסוף, עלינו להוסיף את החלק החסר האחרון של הפאזל. בואו להירשם ProductEditor בבקר האביב שלנו:

@InitBinder חלל פומבי initBinder (קלסר WebDataBinder) {binder.registerCustomEditor (Product.class, ProductEditor חדש (objectMapper)); }

זכור זאת עלינו לקודד את ה- URL של פרמטר JSON כדי להבטיח תחבורה בטוחה.

אז במקום:

GET / spring-mvc-basics-4 / products / get2? Product = {"id": 1, "name": "Asus Zenbook", "price": 800}

עלינו לשלוח:

GET / spring-mvc-basics-4 / products / get2? Product =% 7B% 22id% 22% 3A% 201% 2C% 22name% 22% 3A% 20% 22 Asus% 20 Zenbook% 22% 2C% 22 price% 22% 3A % 20800% 7D

5. מסקנה

לסיכום, ראינו כיצד לעבוד עם JSON באביב MVC. בדרך, הראינו כיצד לשלוח פרמטרים של JSON בבקשות POST ו- GET.

כמו תמיד, קוד המקור המלא של הדוגמאות זמין באתר GitHub.