Google Gson 字段过滤:自定义过滤规则
来源:互联网 发布:java程序员修炼之道 编辑:程序博客网 时间:2024/05/21 14:01
本文内容大多基于官方文档和网上前辈经验总结,经过个人实践加以整理积累,仅供参考。
Google Gson 支持自定义规则过滤字段,使用 GsonBuilder 类的 addSerializationExclusionStrategy 方法处理序列化过程中的字段过滤,使用 addDeserializationExclusionStrategy 方法处理反序列化过程中的字段过滤。这两个方法都接收 com.google.gson.ExclusionStrategy 接口类型参数
示例
1 addSerializationExclusionStrategy
(1) 基于 @Expose 注解过滤
POJO 类
class GsonObject { public String field1 = "FIELD_1"; @Expose(serialize = true, deserialize = false) public String field2 = "FIELD_2"; @Expose(serialize = false, deserialize = true) public String field3 = "FIELD_3"; public String field4 = "FIELD_4"; @Override public String toString() { return "GsonObject [field1=" + field1 + ", field2=" + field2 + ", field3=" + field3 + ", field4=" + field4 + "]"; }}
测试代码:
@Testpublic void test() throws IOException { Gson gson = new GsonBuilder() .addSerializationExclusionStrategy(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes arg0) { Expose expose = arg0.getAnnotation(Expose.class); if (expose != null && expose.deserialize() == false) { return true; } return false; } @Override public boolean shouldSkipClass(Class<?> arg0) { return false; } }).create(); System.out.println(gson.toJson(new GsonObject()));}
运行结果:
(2) 基于字段名过滤
测试代码:
@Testpublic void test() throws IOException { Gson gson = new GsonBuilder() .addSerializationExclusionStrategy(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes arg0) { if (arg0.getName().equals("field4")) { return true; } return false; } @Override public boolean shouldSkipClass(Class<?> arg0) { return false; } }).create(); System.out.println(gson.toJson(new GsonObject()));}
运行结果:
(3) 基于字段类型过滤
POJO 类
class GsonObject { public String field1 = "FIELD_1"; public String field2 = "FIELD_2"; public String field3 = "FIELD_3"; public String field4 = "FIELD_4"; public int field5 = 5; public double field6 = 6.0; public boolean field7 = false; @Override public String toString() { return "GsonObject [field1=" + field1 + ", field2=" + field2 + ", field3=" + field3 + ", field4=" + field4 + ", field5=" + field5 + ", field6=" + field6 + ", field7=" + field7 + "]"; }}
测试代码:
@Testpublic void test() throws IOException { Gson gson = new GsonBuilder() .setVersion(1) .addSerializationExclusionStrategy(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes arg0) { return false; } @Override public boolean shouldSkipClass(Class<?> arg0) { return (arg0 == double.class || arg0 == Double.class); } }).create(); System.out.println(gson.toJson(new GsonObject()));}
运行结果:
2 addDeserializationExclusionStrategy
(1) 基于 @Expose 注解过滤
POJO 类
class GsonObject { private String field1; @Expose(serialize = true, deserialize = false) private String field2; @Expose(serialize = false, deserialize = true) private String field3; private String field4; public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } public String getField2() { return field2; } public void setField2(String field2) { this.field2 = field2; } public String getField3() { return field3; } public void setField3(String field3) { this.field3 = field3; } public String getField4() { return field4; } public void setField4(String field4) { this.field4 = field4; } @Override public String toString() { return "GsonObject [field1=" + field1 + ", field2=" + field2 + ", field3=" + field3 + ", field4=" + field4 + "]"; }}
测试代码:
@Testpublic void test() throws IOException { Gson gson = new GsonBuilder() .addDeserializationExclusionStrategy(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes arg0) { Expose expose = arg0.getAnnotation(Expose.class); if (expose != null && expose.deserialize() == true) { return true; } return false; } @Override public boolean shouldSkipClass(Class<?> arg0) { return false; } }).create(); String gsonStr = "{\"field1\":\"FIELD_A\"," + "\"field2\":\"FIELD_B\"," + "\"field3\":\"FIELD_C\"," + "\"field4\":\"FIELD_D\"}"; System.out.println(gson.fromJson(gsonStr, GsonObject.class));}
运行结果:
(2) 基于字段名过滤
测试代码:
@Testpublic void test() throws IOException { Gson gson = new GsonBuilder() .addDeserializationExclusionStrategy(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes arg0) { if (arg0.getName().equals("field4")) { return true; } return false; } @Override public boolean shouldSkipClass(Class<?> arg0) { return false; } }).create(); String gsonStr = "{\"field1\":\"FIELD_A\"," + "\"field2\":\"FIELD_B\"," + "\"field3\":\"FIELD_C\"," + "\"field4\":\"FIELD_D\"}"; System.out.println(gson.fromJson(gsonStr, GsonObject.class));}
运行结果:
(3) 基于字段类型过滤
POJO 类
class GsonObject { private String field1; private String field2; private String field3; private String field4; private int field5; private double field6; private boolean field7; public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } public String getField2() { return field2; } public void setField2(String field2) { this.field2 = field2; } public String getField3() { return field3; } public void setField3(String field3) { this.field3 = field3; } public String getField4() { return field4; } public void setField4(String field4) { this.field4 = field4; } public int getField5() { return field5; } public void setField5(int field5) { this.field5 = field5; } public double getField6() { return field6; } public void setField6(double field6) { this.field6 = field6; } public boolean isField7() { return field7; } public void setField7(boolean field7) { this.field7 = field7; } @Override public String toString() { return "GsonObject [field1=" + field1 + ", field2=" + field2 + ", field3=" + field3 + ", field4=" + field4 + ", field5=" + field5 + ", field6=" + field6 + ", field7=" + field7 + "]"; }}
测试代码:
@Testpublic void test() throws IOException { Gson gson = new GsonBuilder() .setVersion(1) .addDeserializationExclusionStrategy(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes arg0) { return false; } @Override public boolean shouldSkipClass(Class<?> arg0) { return (arg0 == double.class || arg0 == Double.class); } }).create(); String gsonStr = "{\"field1\":\"FIELD_A\"," + "\"field2\":\"FIELD_B\"," + "\"field3\":\"FIELD_C\"," + "\"field4\":\"FIELD_D\"," + "\"field5\":55," + "\"field6\":99.99," + "\"field7\":true}"; System.out.println(gson.fromJson(gsonStr, GsonObject.class));}
运行结果:
0 0
- Google Gson 字段过滤:自定义过滤规则
- Google Gson 字段过滤:@Expose
- Google Gson 字段过滤:基于 Gson 版本
- Gson 字段过滤
- Google Gson 字段过滤:基于访问修饰符
- 安卓注解使用,实体类指定须使用字段, Google Gson 字段过滤
- Google漏洞过滤规则研究
- Gson 过滤字段的几种方法
- Gson 过滤字段的几种方法
- Gson 过滤字段的几种方法
- wireshark 过滤规则 过滤语法
- Google Gson:POJO 和 JSON 的字段映射规则
- DEDE万能过滤规则
- WinPcap过滤规则
- zz bpf过滤规则
- Nutch url过滤规则
- Ethereal过滤规则语法
- Ethereal过滤规则
- Jquery+Ajax实现checkbox多选参数提交
- powerdesigner 字段添加注释和默认值
- c# ComboBox输入自动筛选功能
- 遍历集合求最小值
- pl/sql developer中用execute调用存储过程弹出‘无效的sql语句’解决方法
- Google Gson 字段过滤:自定义过滤规则
- IOS 数据持久化(一)—— plist 存储
- 关于etc sudoers is world writable问题的解决
- Spring Filter过滤器,Spring拦截未登录用户权限限制
- Ejabberd启动梳理及相关文件介绍
- 热更新Tinker的初次集成使用
- 上传android lib到jcenter库上面碰到的一些问题,以及解决办法
- git 查看某个文件的修改历史
- SpringMVC第一个小例子(集成日志工具)