ג'קסון - סדרת מותאם אישית

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

הדרכה מהירה זו תראה כיצד לסדר ישות ג'אווה עם ג'קסון 2 באמצעות Serializer מותאם אישית.

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

2. סידור סטנדרטי של גרף אובייקט

בואו נגדיר 2 ישויות פשוטות ונראה כיצד ג'קסון מסדרת אותן ללא כל היגיון מותאם אישית:

מחלקה ציבורית משתמש {מזהה אינטליגנטי; שם מחרוזת ציבורי; } פריט בכיתה ציבורית {id מזהה ציבורי; public String itemName; בעל משתמש ציבורי; }

עכשיו, בואו סדר סדרת פריט ישות עם מִשׁתַמֵשׁ יֵשׁוּת:

פריט myItem = פריט חדש (1, "theItem", משתמש חדש (2, "המשתמש")); מחרוזת בסידרה = ObjectMapper חדש (). WriteValueAsString (myItem);

זה יביא לייצוג JSON מלא לשתי הגופים:

{"id": 1, "itemName": "theItem", "owner": {"id": 2, "name": "theUser"}}

3. מותאם אישית Serializer על ObjectMapper

עַכשָׁיו, בואו נפשט את פלט JSON לעיל רק על ידי סדרת ה- תְעוּדַת זֶהוּת של ה מִשׁתַמֵשׁ, לא כל כולו מִשׁתַמֵשׁ לְהִתְנַגֵד; ברצוננו לקבל את JSON הבא והפשוט יותר:

{"id": 25, "itemName": "FEDUfRgS", "owner": 15}

במילים פשוטות, נצטרך להגדיר Serializer מותאם אישית ל פריט חפצים:

מחלקה ציבורית ItemSerializer מרחיבה את StdSerializer {public ItemSerializer () {this (null); } ItemSerializer ציבורי (Class t) {super (t); } @Override חלל ציבורי בסידור (ערך פריט, JsonGenerator jgen, ספק SerializerProvider) זורק IOException, JsonProcessingException {jgen.writeStartObject (); jgen.writeNumberField ("id", value.id); jgen.writeStringField ("itemName", value.itemName); jgen.writeNumberField ("בעלים", value.owner.id); jgen.writeEndObject (); }}

כעת עלינו לרשום את הסידור המותאם אישית הזה עם ה- ObjectMapper בשביל ה פריט בכיתה, ובצע את הסידור:

פריט myItem = פריט חדש (1, "theItem", משתמש חדש (2, "המשתמש")); ממפה ObjectMapper = ObjectMapper חדש (); מודול SimpleModule = SimpleModule חדש (); module.addSerializer (Item.class, ItemSerializer חדש ()); mapper.registerModule (מודול); מחרוזת בסידרה = mapper.writeValueAsString (myItem);

זהו זה - כעת יש לנו סדרת JSON מותאמת אישית פשוטה יותר של פריט-> משתמש ישויות.

4. Serializer מותאם אישית בכיתה

אנחנו יכולים גם רשום את הסידורי באופן ישיר בכיתהבמקום במקום ObjectMapper:

@JsonSerialize (באמצעות = ItemSerializer.class) פריט בכיתה ציבורית {...}

עכשיו, בהופעה סידור סטנדרטי:

פריט myItem = פריט חדש (1, "theItem", משתמש חדש (2, "המשתמש")); מחרוזת בסידרה = ObjectMapper חדש (). WriteValueAsString (myItem);

נקבל את פלט ה- JSON המותאם אישית, שנוצר על ידי הסידורי, שצוין באמצעות @JsonSerialize:

{"id": 25, "itemName": "FEDUfRgS", "owner": 15}

זה מועיל כאשר ObjectMapper לא ניתן לגשת ולהגדיר ישירות.

5. מסקנה

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

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


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