ג'קסון ג'ונסון צפיות
רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 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.
תחתון ג'קסון