中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Gson序列化指定忽略字段的三種寫法是什么

發布時間:2021-10-26 13:41:41 來源:億速云 閱讀:284 作者:iii 欄目:開發技術

這篇文章主要講解了“Gson序列化指定忽略字段的三種寫法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Gson序列化指定忽略字段的三種寫法是什么”吧!

目錄
  • 1. transient關鍵字

  • 2. expose注解

  • 3. 自定義排查策略ExclusionStrategy

在我們日常使用json序列化框架過程中,經常會遇到在輸出json字符串時,忽略某些字段,那么在Gson框架中,要想實現這種方式,可以怎么處理呢?

1. transient關鍵字

最容易想到的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":"一灰灰"}

2. expose注解

借助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方式來得方便

3. 自定義排查策略ExclusionStrategy

除了上面兩種方式之外,通過自定義的排除策略可以實現即使不修改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序列化指定忽略字段的三種寫法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德兴市| 方城县| 延安市| 嘉鱼县| 凤山市| 文山县| 宁明县| 宁乡县| 云浮市| 依安县| 新竹县| 丹寨县| 兴和县| 武功县| 平顺县| 壤塘县| 金平| 安丘市| 胶州市| 裕民县| 长丰县| 工布江达县| 博客| 瓦房店市| 郸城县| 马鞍山市| 洪江市| 噶尔县| 花垣县| 蒙自县| 信丰县| 阳新县| 大同县| 普兰县| 云梦县| 高淳县| 花莲县| 奉新县| 隆德县| 宜章县| 兰州市|