java注解判断字段是否存在_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()

.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 }}

2020-03-01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值