最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Gson序列化指定忽略字段的三種寫(xiě)法詳解

 更新時(shí)間:2021年10月26日 10:14:55   作者:一灰灰  
在我們?nèi)粘J褂胘son序列化框架過(guò)程中,經(jīng)常會(huì)遇到在輸出json字符串時(shí),忽略某些字段,那么在Gson框架中,要想實(shí)現(xiàn)這種方式,可以怎么處理呢,本文就來(lái)介紹一下

在我們?nèi)粘J褂胘son序列化框架過(guò)程中,經(jīng)常會(huì)遇到在輸出json字符串時(shí),忽略某些字段,那么在Gson框架中,要想實(shí)現(xiàn)這種方式,可以怎么處理呢?

本文介紹幾種常見(jiàn)的姿勢(shì)

1. transient關(guān)鍵字

最容易想到的case,就是直接借助jdk的transient關(guān)鍵字來(lái)修飾不希望輸出的對(duì)象,如

@Data
@AllArgsConstructor
@NoArgsConstructor
public static class GItem {
    private String user;
    // @IgnoreField
    private transient String pwd;
}

上面的對(duì)象中,pwd前面使用transient進(jìn)行修飾,那么在輸出json串時(shí),默認(rèn)會(huì)忽略
@Test

public void testPrint() {
    GItem item = new GItem("一灰灰", "yihui");
    String ans = new Gson().toJson(item);
    System.out.println(ans);
}

輸出如

{"user":"一灰灰"}

2. expose注解

借助gson提供的expose注解,也可以實(shí)現(xiàn)上面的case,如在需要保留的字段上添加@Expose

@Data
@AllArgsConstructor
@NoArgsConstructor
public static class GItem {
    @Expose
    private String user;
    // @IgnoreField
    private String pwd;
}

然后我們使用的地方,注意通過(guò) GsonBuilder來(lái)創(chuàng)建Gson對(duì)象

@Test
public void testPrint() {
    GItem item = new GItem("一灰灰", "yihui");
    String ans = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(item);
    System.out.println(ans);
}

上面這種使用姿勢(shì)感覺(jué)有點(diǎn)怪怪的,在需要保留的字段上添加注解,這種使用方式并沒(méi)有jackson的@JsonIgnore方式來(lái)得方便

3. 自定義排查策略ExclusionStrategy

除了上面兩種方式之外,通過(guò)自定義的排除策略可以實(shí)現(xiàn)即使不修改bean,也能指定哪些字段不序列化
一個(gè)簡(jiǎn)單的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) {
                // 包含這個(gè)注解的,直接忽略
                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));
}

上面這種姿勢(shì),更適用于有自定義需求場(chǎng)景的case,那么問(wèn)題來(lái)了,如果我希望序列化的對(duì)象,并不是JOPO對(duì)象,比如傳入的是一個(gè)Map,也希望針對(duì)某些key進(jìn)行忽略,可以怎么整呢?

到此這篇關(guān)于Gson序列化指定忽略字段的三種寫(xiě)法詳解的文章就介紹到這了,更多相關(guān)Gson序列化指定忽略字段內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • MyBatis學(xué)習(xí)教程之開(kāi)發(fā)Dao的方法教程

    MyBatis學(xué)習(xí)教程之開(kāi)發(fā)Dao的方法教程

    這篇文章主要給大家介紹了關(guān)于MyBatis開(kāi)發(fā)Dao的相關(guān)資料,使用Mybatis開(kāi)發(fā)Dao,通常有兩個(gè)方法,即原始Dao開(kāi)發(fā)方法和Mapper接口開(kāi)發(fā)方法。文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • 使用MyBatis查詢千萬(wàn)級(jí)數(shù)據(jù)量操作實(shí)現(xiàn)

    使用MyBatis查詢千萬(wàn)級(jí)數(shù)據(jù)量操作實(shí)現(xiàn)

    這篇文章主要為大家介紹了如何使用MyBatis?查詢千萬(wàn)數(shù)據(jù)量的操作過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • RabbitMQ集群運(yùn)維實(shí)踐教程

    RabbitMQ集群運(yùn)維實(shí)踐教程

    RabbitMQ的集群模式主要有兩種普通集群模式和鏡像隊(duì)列模式,下面給大家分享RabbitMQ集群運(yùn)維實(shí)踐教程,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Spring中自動(dòng)注入的兩種方式總結(jié)

    Spring中自動(dòng)注入的兩種方式總結(jié)

    Spring的核心技術(shù)IOC(Intorol of Converse控制反轉(zhuǎn))的實(shí)現(xiàn)途徑是DI(dependency Insert依賴注入)。而依賴注入(DI)的實(shí)現(xiàn)方式又有兩種,xml方式和注解方式。本文就來(lái)詳細(xì)聊聊這兩個(gè)方式,需要的可以了解一下
    2022-10-10
  • 常見(jiàn)的排序算法,一篇就夠了

    常見(jiàn)的排序算法,一篇就夠了

    這篇文章主要介紹了一些常用排序算法整理,插入排序算法、直接插入排序、希爾排序、選擇排序、冒泡排序等排序,需要的朋友可以參考下
    2021-07-07
  • Java向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)后獲取自增ID的常用方法

    Java向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)后獲取自增ID的常用方法

    有時(shí)候因?yàn)樾略龅男枨笮枰@取剛剛新增的數(shù)據(jù)的自增的主鍵ID,下面這篇文章主要給大家介紹了關(guān)于Java向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)后獲取自增ID的常用方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • k8s+springboot+CronJob定時(shí)任務(wù)部署實(shí)現(xiàn)

    k8s+springboot+CronJob定時(shí)任務(wù)部署實(shí)現(xiàn)

    本文主要介紹了k8s+springboot+CronJob定時(shí)任務(wù)部署實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring中SpEL表達(dá)式的使用全解

    Spring中SpEL表達(dá)式的使用全解

    SpEL是Spring框架中用于表達(dá)式語(yǔ)言的一種方式,本文主要介紹了Spring中SpEL表達(dá)式的使用全解,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 解決執(zhí)行maven命令時(shí)提示Process terminated的問(wèn)題

    解決執(zhí)行maven命令時(shí)提示Process terminated的問(wèn)題

    這篇文章主要介紹了解決執(zhí)行maven命令時(shí)提示Process terminated的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringBoot JWT令牌的使用

    SpringBoot JWT令牌的使用

    JWT令牌中包含了一個(gè)用戶名和哈希值,這些都需要進(jìn)行驗(yàn)證,本文主要介紹了SpringBoot JWT令牌的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

观塘区| 静安区| 雷山县| 裕民县| 西畴县| 德昌县| 普兰店市| 乐昌市| 理塘县| 甘德县| 高阳县| 云阳县| 芒康县| 德惠市| 东阿县| 图们市| 乐业县| 潼南县| 公安县| 扶余县| 吕梁市| 巴彦淖尔市| 买车| 镇安县| 五莲县| 民权县| 洛扎县| 教育| 安丘市| 固原市| 漠河县| 镶黄旗| 讷河市| 瑞安市| 东兰县| 隆子县| 乌兰浩特市| 酒泉市| 永仁县| 比如县| 临汾市|