Gson系列5 --- 总结篇 -- @Expose 和 transient @Since @Until、 ExclusionStrategy 和 自定义注解

本文是Gson系列的总结篇,探讨了如何使用@Expose注解来控制字段的序列化与反序列化,以及如何处理transient关键字的影响。同时,介绍了版本注解@Since和@Until在序列化过程中的应用。此外,还讲解了如何通过ExclusionStrategy接口和自定义注解实现更灵活的数据处理。
# @Expose transient @Since @Until ExclusionStrategy 和 自定义注解
类属性的字段过滤
  1、属性注解
    @Expose  对应的链接
  2、版本注解
    @Since  @Until 对应的链接
  3、修饰符
    publicstatic finalprivateprotected transient
    
  4、排除策略 
    基于策略是利用Gson提供的ExclusionStrategy接口,同样需要使用GsonBuilder,
    相关API 2个,分别是
        addSerializationExclusionStrategy() 
        addDeserializationExclusionStrategy() 分别针对序列化和反序化时。
    --> 需要实现implements ExclusionStrategy 接口
    见下方自定义注解
    
  5、自定义注解(基于排除策略)


1、属性注解   -- 参考链接

2、版本注解  -- 参考链接

5、自定义注解 -- 参考链接


3、对于修饰符的序列化

package sun.rain.amazing.gson.sumup;

import lombok.Getter;
import lombok.ToString;

/**
 * 对于修饰符的测试
 * @author sunRainAmazing
 */
@Getter
@ToString
public class GsonModifier {

    public static final String publicStaticFinal = "public static final";

    public static String publicStatic = "public static";

    final String finalField = "default final";

    static String staticField = "default static";

    public String publicField = "public";

    protected String protectedField = "protected";

    String defaultField = "default";

    private String privateField = "private";

    transient String transientField = "transient";
}
package sun.rain.amazing.gson.sumup;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.junit.Test;

import java.lang.reflect.Modifier;

/**
 * @author sunRainAmazing
 */
public class GsonModifierTest {

    Gson gson = new Gson();

    /**
     * 对于 static 修饰和 transient 修饰的 都会默认不被序列化
  *
     * {"finalField":"default final",
     *   "publicField":"public",
     *   "protectedField":"protected",
     *   "defaultField":"default",
     *   "privateField":"private"
     *   }
     *
     *
     *   new GsonBuilder().excludeFieldsWithModifiers()
     *   采用这种方式 -- 会使 static transient 失效,除非不排除
  * {"publicField":"public",
     *  "protectedField":"protected",
     *  "defaultField":"default",
     *  "transientField":"transient"
     *  }
     */
    @Test
    public void test(){
        GsonModifier g = new GsonModifier();

        System.out.println(gson.toJson(g));

        Gson gson = new GsonBuilder()
                // 排除带有以下修饰符的 属性 -- 会 使 transient 失效
        .excludeFieldsWithModifiers(Modifier.FINAL,
                        Modifier.STATIC, Modifier.PRIVATE)
                .create();
        System.out.println(gson.toJson(g));
    }
}




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值