סדרת XML ויריקת ערים עם ג'קסון

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

במדריך זה נבחן כיצד לסדר אובייקטים של Java לנתוני XML באמצעות ג'קסון 2.x ולבטל את עריכתם מחדש חזרה ל- POJO.

אנו נתמקד בפעולה הבסיסית שאינה דורשת הרבה מורכבות או התאמה אישית.

2. XmlMapper לְהִתְנַגֵד

XmlMapper הוא המעמד הראשי של ג'קסון 2.x שעוזר לנו בסידור, ולכן נצטרך ליצור מופע שלו:

מיפוי XmlMapper = XmlMapper חדש ();

זֶה ממפה זמין ב jackson-dataformat-xml צנצנת, ולכן עלינו להוסיף אותה כתלות שלנו pom.xml:

 com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.11.1 

אנא בדוק את הגרסה האחרונה של התלות jackson-dataformat-xml במאגר Maven.

3. סדר סדר ג'אווה ל- XML

XmlMapper הוא תת-מחלקה של ObjectMapper המשמש בסידור JSON. עם זאת, זה מוסיף כמה שינויים ספציפיים ל- XML ​​למחלקת ההורים.

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

class SimpleBean {private int x = 1; פרטי int y = 2; // סטרים וקובעים סטנדרטיים}

3.1. סידור ל- XML חוּט

אנו יכולים לסדר את אובייקט Java שלנו ל- XML חוּט:

@Test הציבור בטל כאשר JavaSerializedToXmlStr_thenCorrect () זורק את JsonProcessingException {XmlMapper xmlMapper = XmlMapper חדש (); מחרוזת xml = xmlMapper.writeValueAsString (SimpleBean חדש ()); assertNotNull (xml); }

כתוצאה מכך נקבל:

 1 2 

3.2. סידור סדרתי לקובץ ה- XML

אנו יכולים גם לסדר את אובייקט Java שלנו לקובץ ה- XML:

@Test הציבור בטל כאשר JavaSerializedToXmlFile_thenCorrect () זורק IOException {XmlMapper xmlMapper = XmlMapper חדש (); xmlMapper.writeValue (קובץ חדש ("simple_bean.xml"), חדש SimpleBean ()); קובץ קובץ = קובץ חדש ("simple_bean.xml"); assertNotNull (קובץ); }

ולהלן נוכל לראות את תוכן הקובץ שנוצר בשם simple_bean.xml:

 1 2 

4. התאם מחדש את XML ל- Java

בחלק זה נבחן כיצד להשיג אובייקטים של Java מ- XML.

4.1. התאם מחדש ממחרוזת ה- XML

כמו בסידור, אנו יכולים גם לבטל את הריגול מחדש של מחרוזת XML לאובייקט Java:

@Test ציבורי בטל כאשר JavaGotFromXmlStr_thenCorrect () זורק IOException {XmlMapper xmlMapper = XmlMapper חדש (); ערך SimpleBean = xmlMapper.readValue ("12", SimpleBean.class); assertTrue (value.getX () == 1 && value.getY () == 2); }

4.2. התפטר מחדש מקובץ ה- XML

כמו כן, אם יש לנו קובץ XML, נוכל להמיר אותו בחזרה לאובייקט Java.

כאן קודם קראנו את הקובץ לזרם קלט ואז להמיר את זרם הקלט ל- a חוּט בשיטת שירות פשוטה.

שאר הקוד דומה לזה שבסעיף 4.1:

@ מבחן ציבורי בטל כאשר JavaGotFromXmlFile_thenCorrect () זורק IOException {File file = קובץ חדש ("simple_bean.xml"); XmlMapper xmlMapper = XmlMapper חדש (); מחרוזת xml = inputStreamToString (FileInputStream חדש (קובץ)); ערך SimpleBean = xmlMapper.readValue (xml, SimpleBean.class); assertTrue (value.getX () == 1 && value.getY () == 2); }

שיטת השירות:

מחרוזת inputStreamToString (InputStream היא) זורק IOException {StringBuilder sb = StringBuilder חדש (); קו מיתרים; BufferedReader br = BufferedReader חדש (InputStreamReader חדש (הוא)); ואילו ((line = br.readLine ())! = null) {sb.append (line); } br.close (); החזר sb.toString (); }

5. טיפול באלמנטים מהוונים

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

5.1. התפטר מחדש מה- XML חוּט

נניח שיש לנו XML עם שדה אחד באותיות רישיות:

 1 2 

על מנת לטפל נכון באלמנטים באותיות רישיות, עלינו לציין את השדה "x" עם ה- @JsonProperty ביאור:

class SimpleBeanForCapitalizedFields {@JsonProperty ("X") פרטי int x = 1; פרטי int y = 2; // גטרים סטנדרטיים, סטרים}

כעת נוכל לבטל את כניסתו של XML בצורה נכונה חוּט בחזרה לאובייקט Java:

@ מבחן ציבורי בטל כאשר JavaGotFromXmlStrWithCapitalElem_thenCorrect () זורק IOException {XmlMapper xmlMapper = XmlMapper חדש (); ערך SimpleBeanForCapitalizedFields = xmlMapper.readValue ("12", SimpleBeanForCapitalizedFields.class); assertTrue (value.getX () == 1 && value.getY () == 2); }

5.2. בצע סדרת סדרות למחרוזת ה- XML

על ידי הערת שדות חובה עם @JsonProperty, נוכל לסדר בצורה נכונה אובייקט Java ל- XML חוּט עם אחד או יותר מרכיבים באותיות רישיות:

@ מבחן ציבורי בטל כאשר JavaSerializedToXmlFileWithCapitalizedField_thenCorrect () זורק IOException {XmlMapper xmlMapper = XmlMapper חדש (); xmlMapper.writeValue (קובץ חדש ("target / simple_bean_capitalized.xml"), SimpleBeanForCapitalizedFields חדש ()); קובץ קובץ = קובץ חדש ("target / simple_bean_capitalized.xml"); assertNotNull (קובץ); }

6. סדר סדר רשימה ל- XML

ה XmlMapper מסוגל לסדר שעועית ג'אווה שלמה למסמך. כדי להמיר אובייקט Java ל- XML, ניקח דוגמה פשוטה עם האובייקט והמערכים המקוננים.

הכוונה שלנו היא לסדר א אדם אובייקט, יחד עם הרכיב שלו כתובת אובייקט, לתוך XML.

ה- XML ​​הסופי שלנו ייראה בערך:

 רוהאן דיי 9911034731 9911033478 שם 1 עיר 1 שם 2 עיר 2 

שימו לב שמספרי הטלפון שלנו מקופלים ב- מספרי טלפון עטיפה בזמן שהכתובת שלנו לא.

אנו יכולים להביע ניואנס זה באמצעות @JacksonXMLElementWrapper ביאור שלנו אדם מעמד:

כיתת גמר ציבורית אדם {פרטי מחרוזת שם פרטי; שם משפחה פרטי מחרוזת; רשימת פרטי phoneNumbers = ArrayList חדש (); @JacksonXmlElementWrapper (useWrapping = false) כתובת רשימה פרטית = ArrayList חדש (); // סטרים וקובעים סטנדרטיים}

למעשה, אנו יכולים לשנות את שם אלמנט העטיפה באמצעות @JacksonXmlElementWrapper (localName = ‘phoneNumbers’). לחלופין, אם איננו רוצים לעטוף את האלמנטים שלנו, נוכל להשבית את המיפוי באמצעותו @JacksonXmlElementWrapper (useWrapping = false).

ואז בואו נגדיר את שלנו כתובת סוּג:

כתובת בכיתה ציבורית כתובת {String streetName; עיר מיתרים; // סטרים וקובעים סטנדרטיים}

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

סופי סטטי פרטי מחרוזת XML = "..."; @ מבחן ציבורי בטל כאשר JavaSerializedToXmlFile_thenSuccess () זורק IOException {XmlMapper xmlMapper = XmlMapper חדש (); אדם אדם = testPerson (); // נתוני בדיקה ByteArrayOutputStream byteArrayOutputStream = ByteArrayOutputStream חדש (); xmlMapper.writeValue (byteArrayOutputStream, אדם); assertEquals (XML, byteArrayOutputStream.toString ()); }

7. התייג מחדש את XML ל- רשימה

ג'קסון יכול לקרוא גם XML המכיל רשימות של אובייקטים.

אם ניקח את ה- XML ​​שלנו כמו קודם, ה- readValue השיטה מסתדרת בסדר גמור:

@Test הציבור בטל כאשר JavaDeserializedFromXmlFile_thenCorrect () זורק IOException {XmlMapper xmlMapper = XmlMapper חדש (); ערך אדם = xmlMapper.readValue (XML, Person.class); assertEquals ("City1", value.getAddress (). get (0) .getCity ()); assertEquals ("City2", value.getAddress (). get (1) .getCity ()); }

8. מסקנה

מאמר פשוט זה המחיש כיצד לסדר POJO פשוט ל- XML ​​ולהשיג POJO מנתוני XML בסיסיים.

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

קוד המקור שמלווה מאמר זה זמין ב- GitHub.


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