您好,登錄后才能下訂單哦!
這篇文章主要講解了“Gson序列化指定忽略字段的三種寫法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Gson序列化指定忽略字段的三種寫法是什么”吧!
1. transient關鍵字
2. expose注解
3. 自定義排查策略ExclusionStrategy
在我們日常使用json序列化框架過程中,經常會遇到在輸出json字符串時,忽略某些字段,那么在Gson框架中,要想實現這種方式,可以怎么處理呢?
最容易想到的case,就是直接借助jdk的transient關鍵字來修飾不希望輸出的對象,如
@Data @AllArgsConstructor @NoArgsConstructor public static class GItem { private String user; // @IgnoreField private transient String pwd; }
上面的對象中,pwd前面使用transient進行修飾,那么在輸出json串時,默認會忽略
@Test
public void testPrint() { GItem item = new GItem("一灰灰", "yihui"); String ans = new Gson().toJson(item); System.out.println(ans); }
輸出如
{"user":"一灰灰"}
借助gson提供的expose注解,也可以實現上面的case,如在需要保留的字段上添加@Expose
@Data @AllArgsConstructor @NoArgsConstructor public static class GItem { @Expose private String user; // @IgnoreField private String pwd; }
然后我們使用的地方,注意通過 GsonBuilder來創建Gson對象
@Test public void testPrint() { GItem item = new GItem("一灰灰", "yihui"); String ans = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(item); System.out.println(ans); }
上面這種使用姿勢感覺有點怪怪的,在需要保留的字段上添加注解,這種使用方式并沒有jackson的@JsonIgnore方式來得方便
除了上面兩種方式之外,通過自定義的排除策略可以實現即使不修改bean,也能指定哪些字段不序列化
一個簡單的demo如下,如果包含自定義的注解,則不序列化,或者field_name == pwd也不序列化
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface IgnoreField { } @Test public void testExclude() { Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes fieldAttributes) { if (fieldAttributes.getAnnotation(IgnoreField.class) != null) { // 包含這個注解的,直接忽略 return true; } // 成員白名單 if (fieldAttributes.getName().equalsIgnoreCase("pwd")) { return true; } return false; } @Override public boolean shouldSkipClass(Class<?> aClass) { if (aClass.isAnnotationPresent(IgnoreField.class)) { return true; } return false; } }).registerTypeAdapterFactory(new MyMapTypeAdapterFactory(new ConstructorConstructor(new HashMap<>()), false)).create(); GItem item = new GItem(); item.setUser("一灰灰"); item.setPwd("123456"); System.out.println(gson.toJson(item)); }
上面這種姿勢,更適用于有自定義需求場景的case,那么問題來了,如果我希望序列化的對象,并不是JOPO對象,比如傳入的是一個Map,也希望針對某些key進行忽略,可以怎么整呢?
感謝各位的閱讀,以上就是“Gson序列化指定忽略字段的三種寫法是什么”的內容了,經過本文的學習后,相信大家對Gson序列化指定忽略字段的三種寫法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。