栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java Gson:如何从没有注释的序列化中排除特定字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java Gson:如何从没有注释的序列化中排除特定字段

因此,你要排除

firstName
country.name
。这是你的
ExclusionStrategy
样子

    public class TestExclStrat implements ExclusionStrategy {        public boolean shouldSkipClass(Class<?> arg0) { return false;        }        public boolean shouldSkipField(FieldAttributes f) { return (f.getDeclaringClass() == Student.class && f.getName().equals("firstName"))|| (f.getDeclaringClass() == Country.class && f.getName().equals("name"));        }    }

如果你仔细看它返回true的

Student.firstName
Country.name
,这是要排除的东西。

你需要应用此

ExclusionStrategy
这样,

    Gson gson = new GsonBuilder()        .setExclusionStrategies(new TestExclStrat())        //.serializeNulls() <-- uncomment to serialize NULL fields as well        .create();    Student src = new Student();    String json = gson.toJson(src);    System.out.println(json);

返回:

{ "middleName": "J.", "initials": "P.F", "lastName": "Fry", "country": { "id": 91}}

我假设国家对象id = 91L在学生课堂中进行了初始化。

你可能会喜欢上。例如,你不想序列化名称中包含“ name”字符串的任何字段。做这个:

public boolean shouldSkipField(FieldAttributes f) {    return f.getName().toLowerCase().contains("name"); }

这将返回:

{ "initials": "P.F", "country": { "id": 91 }}

编辑:根据要求添加了更多信息。

这样ExclusionStrategy就可以了,但是你需要传递“完全合格的字段名称”。见下文:

    public class TestExclStrat implements ExclusionStrategy {        private Class<?> c;        private String fieldName;        public TestExclStrat(String fqfn) throws SecurityException, NoSuchFieldException, ClassNotFoundException        { this.c = Class.forName(fqfn.substring(0, fqfn.lastIndexOf("."))); this.fieldName = fqfn.substring(fqfn.lastIndexOf(".")+1);        }        public boolean shouldSkipClass(Class<?> arg0) { return false;        }        public boolean shouldSkipField(FieldAttributes f) { return (f.getDeclaringClass() == c && f.getName().equals(fieldName));        }    }

这就是我们如何通用地使用它。

    Gson gson = new GsonBuilder()        .setExclusionStrategies(new TestExclStrat("in.naishe.test.Country.name"))        //.serializeNulls()        .create();    Student src = new Student();    String json = gson.toJson(src);    System.out.println(json); 

它返回:

{ "firstName": "Philip" , "middleName": "J.", "initials": "P.F", "lastName": "Fry", "country": { "id": 91 }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395114.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号