1、简述
[ExclusionStrategy] 排除策略 用于排除相关的属性 作用等同于 @Expose 和 transient 自定义相关注解 进行排除操作 自定义排除属性注解
2、实体
package sun.rain.amazing.gson.strategy.exclude; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 序列化时 用于排除 属性 * @author sunRainAmazing */ @Target( ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface GsonExclude { }
package sun.rain.amazing.gson.strategy.exclude; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import sun.rain.amazing.gson.strategy.exclude.GsonExclude; /** * @author sunRainAmazing */ public class GsonExclusionStrategy implements ExclusionStrategy { /** * 是否跳过属性 不序列化 * 返回 false 代表 属性要进行序列化 * @param f * @return */ @Override public boolean shouldSkipField(FieldAttributes f) { /** * 判断当前属性是否带有GsonExclude排除的注解 * 若有 则 不进行序列化 * 若无 为 null 则进行序列化 */ return f.getAnnotation(GsonExclude.class) != null; } /** * 是否排除对应的类 * 同时这里也可以 排除 int 类型的属性 不进行序列化 * * 若不排除任何 类 直接 返回false 即可 * @param clazz * @return */ @Override public boolean shouldSkipClass(Class<?> clazz) { return clazz == int.class; } }
实体测试类
package sun.rain.amazing.gson.strategy.exclude; import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.Since; import com.google.gson.annotations.Until; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; /** * @GsonExclude 在序列化时 要比 @Expose 这个注解 好用 * ,无需每个属性都加 , 只需在排除的属性加即可 * * @author sunRainAmazing */ @Data @NoArgsConstructor @AllArgsConstructor public class GsonExcludeEntity { private Integer id; private String name; /** * 这个属性 序列化 排除 */ @GsonExclude @SerializedName("nick_name") private String nickName; /** * 这个属性 序列化 排除 */ @GsonExclude private Date birthday; private String fieldStrategy; /** * 这个属性 序列化 排除 */ @Since(1.0) @Until(1.8) @GsonExclude private double version; /** * 这个属性 序列化 排除 */ @Since(2.0) @GsonExclude private double ver; /** * 这个属性 序列化 排除 */ private int count; }
3、测试
package sun.rain.amazing.gson.serialize; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.LongSerializationPolicy; import org.junit.Test; import sun.rain.amazing.gson.strategy.exclude.GsonExcludeEntity; import sun.rain.amazing.gson.strategy.exclude.GsonExclusionStrategy; import sun.rain.amazing.gson.strategy.field.FieldStrategy; import java.util.Date; /** * @author sunRainAmazing */ public class GsonExcludeEntityTest { /** * { * "id": 1001, * "name": "tomcat", * "field.strategy": "someField" * } */ @Test public void test(){ GsonExcludeEntity u = new GsonExcludeEntity( 1001,"tomcat","jerry", new Date(),"someField", 1.2,20,110); Gson gson = new GsonBuilder() // 设置空值 -- 打印 .serializeNulls() // 设置版本 .setVersion(2.0) // 设置 格式输出 .setPrettyPrinting() // 设置 时间输出格式 .setDateFormat("yyyy-MM-dd") // 设置 自定义的属性输出名 策略 , 其优先级低于注解的形式 .setFieldNamingStrategy(new FieldStrategy.AllUpperCaseStrategy()) // 设置 内置的属性 命名策略 ,其优先级 低于注解的形式 .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DOTS) // 开启 复杂的map key的 策略形式 .enableComplexMapKeySerialization() // 开启 排除 不进行序列化的 属性 .setExclusionStrategies(new GsonExclusionStrategy()) // 设置 Long类型的数据 以String 类型 序列化 .setLongSerializationPolicy(LongSerializationPolicy.STRING) .create(); System.out.println(gson.toJson(u)); } }
本文详细介绍了Gson库中的ExclusionStrategy策略,通过实例展示了如何使用排除注解来控制序列化和反序列化过程中的字段。通过对实体类的设定和测试,揭示了ExclusionStrategy在实际应用中的作用。
2934

被折叠的 条评论
为什么被折叠?



