ג'קסון ג'ונסון צפיות

ג'קסון טופ

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

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

במדריך זה נעבור כיצד להשתמש בתצוגות ג'קסון JSON לסידור / ערעור אובייקטים, התאמה אישית של התצוגות ולבסוף - כיצד להתחיל להשתלב עם אביב

2. סדר סדר באמצעות תצוגות JSON

ראשית - בוא נעבור דוגמה פשוטה - סידר אובייקט באמצעות @JsonView.

הנה השקפתנו:

צפיות בכיתה ציבורית {מחלקה סטטית ציבורית ציבורית {}}

וה "מִשׁתַמֵשׁישות:

מחלקה ציבורית משתמש {מזהה אינטליגנטי; @JsonView (Views.Public.class) שם מחרוזת ציבורי; }

עכשיו בואו לסדר "מִשׁתַמֵשׁמופע תוך שימוש בתצוגה שלנו:

@ מבחן ציבורי בטל כאשר UseJsonViewToSerialize_thenCorrect () זורק JsonProcessingException {משתמש משתמש = משתמש חדש (1, "ג'ון"); ממפה ObjectMapper = ObjectMapper חדש (); mapper.disable (MapperFeature.DEFAULT_VIEW_INCLUSION); תוצאת מחרוזת = mapper .writerWithView (Views.Public.class) .writeValueAsString (user); assertThat (תוצאה, containString ("ג'ון")); assertThat (תוצאה, לא (containString ("1"))); }

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

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

3. השתמש במספר תצוגות JSON

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

כאן עלינו לראות היכן פְּנִימִי מרחיב פּוּמְבֵּי, עם התפיסה הפנימית המרחיבה את הציבור:

מעמד ציבורי צפיות {מחלקה סטטית ציבורית ציבורית {} מעמד סטטי ציבורי פנימי מרחיב ציבורי {}}

והנה היישות שלנו "פריט"שם רק השדות תְעוּדַת זֶהוּת ו שֵׁם כלולים ב פּוּמְבֵּי נוף:

פריט בכיתה ציבורית {@JsonView (Views.Public.class) מזהה מידע ציבורי; @JsonView (Views.Public.class) פריט מחרוזת itemName; @JsonView (Views.Internal.class) בעל מחרוזות ציבורי; }

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

@ מבחן ציבורי בטל כאשר UsePublicView_thenOnlyPublicSerialized () זורק JsonProcessingException {פריט פריט = פריט חדש (2, "ספר", "ג'ון"); ממפה ObjectMapper = ObjectMapper חדש (); תוצאת מחרוזת = mapper .writerWithView (Views.Public.class) .writeValueAsString (פריט); assertThat (תוצאה, containString ("ספר")); assertThat (תוצאה, containString ("2")); assertThat (תוצאה, לא (containString ("ג'ון"))); }

אבל אם אנו משתמשים ב- פְּנִימִי כדי לבצע את הסידור, כל השדות יהיו חלק מפלט JSON:

@ מבחן ציבורי בטל כאשר UseInternalView_thenAllSerialized () זורק JsonProcessingException {פריט פריט = פריט חדש (2, "ספר", "ג'ון"); ממפה ObjectMapper = ObjectMapper חדש (); תוצאת מחרוזת = mapper .writerWithView (Views.Internal.class) .writeValueAsString (פריט); assertThat (תוצאה, containString ("ספר")); assertThat (תוצאה, containString ("2")); assertThat (תוצאה, containString ("ג'ון")); }

4. התפטלו מחדש מהתצוגות JSON

עכשיו - בואו נראה כיצד להשתמש בתצוגות JSON לנטרול ערכי אובייקטים - במיוחד, א מִשׁתַמֵשׁ למשל:

@ מבחן ציבורי בטל כאשר UseJsonViewToDeserialize_thenCorrect () זורק IOException {String json = "{" id ": 1," name ":" John "}"; ממפה ObjectMapper = ObjectMapper חדש (); משתמש משתמש = ממפה .readerWithView (Views.Public.class). ForType (User.class) .readValue (json); assertEquals (1, user.getId ()); assertEquals ("John", user.getName ()); }

שים לב כיצד אנו משתמשים ב- readerWithView () ממשק API ליצירת ObjectReader באמצעות התצוגה הנתונה.

5. התאמה אישית של תצוגות JSON

לאחר מכן - בואו נראה כיצד להתאים אישית את תצוגות JSON. בדוגמה הבאה - אנחנו רוצים להכין את מִשׁתַמֵשׁשֵׁם”UpperCase בתוצאת הסידור.

אנחנו נשתמש BeanPropertyWriter ו BeanSerializerModifier כדי להתאים אישית את תצוגת JSON שלנו. ראשית - הנה ה BeanPropertyWriterUpperCasingWriter להפוך את מִשׁתַמֵשׁשֵׁם למקרה עליון:

המעמד הציבורי UpperCasingWriter מרחיב את BeanPropertyWriter {BeanPropertyWriter _writer; ציבורי UpperCasingWriter (BeanPropertyWriter w) {super (w); _סופר = w; } @Override חלל ציבורי serializeAsField (שעועית אובייקט, JsonGenerator gen, SerializerProvider prov) זורק חריג {מחרוזת ערך = ((משתמש) שעועית) .name; ערך = (ערך == null)? "": value.toUpperCase (); gen.writeStringField ("שם", ערך); }}

והנה ה BeanSerializerModifier להגדיר את מִשׁתַמֵשׁ שֵׁם BeanPropertyWriter עם המנהג שלנו UpperCasingWriter:

המחלקה הציבורית MyBeanSerializerModifier מרחיב את BeanSerializerModifier {@Override public list changeProperties (SerializationConfig config, BeanDescription beanDesc, List beanProperties) {for (int i = 0; i <beanProperties.size (); i ++) {BeanPropertyWriter). אם (writer.getName () == "שם") {beanProperties.set (i, UpperCasingWriter חדש (סופר)); }} להחזיר beanProperties; }}

עכשיו - בואו סדרת א מִשׁתַמֵשׁ מופע באמצעות Serializer ששונה:

@ מבחן ציבורי בטל כאשר UsCustomJsonViewToSerialize_thenCorrect () זורק JsonProcessingException {משתמש משתמש = משתמש חדש (1, "ג'ון"); SerializerFactory serializerFactory = BeanSerializerFactory.instance .withSerializerModifier (MyBeanSerializerModifier חדש ()); ממפה ObjectMapper = ObjectMapper חדש (); mapper.setSerializerFactory (serializerFactory); תוצאת מחרוזת = mapper .writerWithView (Views.Public.class) .writeValueAsString (user); assertThat (תוצאה, containString ("JOHN")); assertThat (תוצאה, containString ("1")); }

6. שימוש בתצוגות JSON עם אביב

לבסוף - בואו נסתכל במהירות על השימוש בתצוגות JSON עם ה- מסגרת האביב. אנחנו יכולים למנף את @JsonView ביאור להתאמה אישית של תגובת JSON שלנו ברמת ה- API.

בדוגמה הבאה - השתמשנו ב- פּוּמְבֵּי צפה להגיב:

@JsonView (Views.Public.class) @RequestMapping ("/ items / {id}") פריט ציבורי getItemPublic (@ ID PathVariable int) {return ItemManager.getById (id); }

התגובה היא:

{"id": 2, "itemName": "book"}

וכאשר השתמשנו ב- פְּנִימִי ראה כדלקמן:

@JsonView (Views.Internal.class) @RequestMapping ("/ items / internal / {id}") פריט ציבורי getItemInternal (@ ID PathVariable int) {return ItemManager.getById (id); }

זו הייתה התגובה:

{"id": 2, "itemName": "book", "ownerName": "John"}

אם אתה רוצה לצלול עמוק יותר לשימוש בתצוגות עם אביב 4.1, עליך לבדוק את השיפורים של ג'קסון באביב 4.1.

7. מסקנה

במדריך מהיר זה, הסתכלנו על תצוגות ג'קסון JSON ועל ההערה @JsonView. הראינו כיצד להשתמש ב- JSON Views כדי לשלוט היטב על תהליך הסדרת / deserialization שלנו - תוך שימוש בתצוגה אחת או מרובה.

את הקוד השלם עבור הדרכה זו ניתן למצוא באתר GitHub.

תחתון ג'קסון

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

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