קבל ופרסם רשימות של אובייקטים באמצעות RestTemplate

1. הקדמה

ה RestTemplate class הוא הכלי המרכזי לביצוע פעולות HTTP בצד הלקוח באביב. הוא מספק מספר שיטות שירות לבניית בקשות HTTP וטיפול בתגובות.

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

במדריך זה נראה כיצד להשתמש RestTemplate לשניהם לקבל ו הודעה רשימת חפצים.

2. שירות לדוגמא

נשתמש ב- API לעובד שיש לו שתי נקודות קצה של HTTP - קבל הכל וצור:

  • GET / עובדים
  • פוסט / עובדים

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

שכבה ציבורית עובד {מזהה ארוך ציבורי; כותרת מחרוזת ציבורית; // קונסטרוקטור סטנדרטי וקובעים / גטרים}

כעת אנו מוכנים לכתוב קוד שמשתמש בו RestTemplate להשיג וליצור רשימות של עוֹבֵד חפצים.

3. קבל רשימת חפצים עם RestTemplate

בדרך כלל כשאתה מתקשר ל- GET, אתה יכול להשתמש באחת מהשיטות הפשוטות ב- RestTemplate, כמו:

getForObject (url url, class response type)

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

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

למרבה המזל יש לנו שתי אפשרויות לעקוף את זה.

3.1. באמצעות מערכים

ראשית, נוכל להשתמש RestTemplate.getForEntity () להשיג מגוון של אובייקטים דרך ה- תגובה סוג פָּרָמֶטֶר. מה שתגיד מעמד אנו מציינים שם יתאים תגובה תגובהסוג הפרמטר:

ResponseEntity response = restTemplate.getForEntity ("// localhost: 8080 / עובדים /", שכיר []. Class); עובד [] עובדים = response.getBody ();

יתר על כן, היינו יכולים להשתמש RestTemplate.exchange כדי להשיג את אותה התוצאה.

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

3.2. שימוש בכיתת עטיפה

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

שכבת ציבור EmployeeList {עובדי רשימה פרטית; EmployeeList ציבורי () {עובדים = ArrayList חדש (); } // קונסטרוקטור סטנדרטי וגטר / סטר}

עכשיו נוכל להשתמש בפשוטה יותר getForObject () שיטה להשיג את רשימת העובדים:

תגובה של EmployeeList = restTemplate.getForObject ("// localhost: 8080 / עובדים", EmployeeList.class); רשימת עובדים = respons.getEm עובדים ();

קוד זה פשוט בהרבה אך דורש אובייקט עטיפה נוסף.

4. פרסם רשימת חפצים עם RestTemplate

עכשיו בואו נסתכל כיצד לשלוח רשימת אובייקטים מהלקוח שלנו לשרת. בדיוק כמו לעיל, RestTemplate מספק שיטה פשוטה להתקשרות POST:

postForObject (url url, בקשת אובייקט, response response סוג)

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

הסיבה לכך היא שעכשיו אנחנו עוברים מאובייקטים של Java ל- JSON. רשימת האובייקטים וסוגם ידועים על ידי ה- JVM ולכן הם מסודרים כראוי:

רשימת newEmployees = ArrayList new (); newEmployees.add (עובד חדש (3, "מתמחה")); newEmployees.add (עובד חדש (4, "מנכ"ל")); restTemplate.postForObject ("// localhost: 8080 / עובדים /", עובדים חדשים, ResponseEntity.class);

4.1. שימוש בכיתת עטיפה

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

רשימת newEmployees = ArrayList new (); newEmployees.add (עובד חדש (3, "מתמחה")); newEmployees.add (עובד חדש (4, "מנכ"ל")); restTemplate.postForObject ("// localhost: 8080 / עובדים", EmployeeList חדש (newEmployees), ResponseEntity.class);

5. מסקנה

שימוש ב- RestTemplate הוא דרך פשוטה לבנות לקוחות HTTP לתקשר עם השירותים שלך.

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

כרגיל, הקוד השלם זמין בפרויקט Github.


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