我正在使用Gson进行改造。我的服务器接受空值,所以在我给出的gson构建器中
gsonBuilder.serializeNulls();
因此不会忽略空值。但是在某些API
中我有一个特例,其中一些字段应该存在,即使它是空的,如果它是null,则其他一些字段不应该序列化。
例如,如果我有一个像
这样的请求类class Request {
String id;
String type;
}
如果我有id=null
和type=null
请求,gson
应将其序列化为:
{
id : null
}
这意味着,如果type为null,则应忽略该字段,但如果id为null,则它应在请求中显示为null。
目前正在序列化如下:
{
id : null,
type:null
}
因为我已经给了gsonBuilder.serializeNulls();
。我该如何处理这个特例?
答案 0 :(得分:0)
这是我的代码:
public static void main(String[] args) throws SecurityException,
NoSuchFieldException, ClassNotFoundException {
GsonBuilder gson = new GsonBuilder();
Request request = new Request();
Gson g = gson.serializeNulls()
.setExclusionStrategies(new TestExclStrat(request)).create();
System.out.println(g.toJson(request));
}
class Request {
public String id;
public String type;
}
class TestExclStrat implements ExclusionStrategy {
private Object obj;
public TestExclStrat(Object obj) throws SecurityException,
NoSuchFieldException, ClassNotFoundException {
this.obj = obj;
}
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}
public boolean shouldSkipField(FieldAttributes f) {
if (obj instanceof Request) {
System.out.println(f.getName());
if (!"id".equals(f.getName())) {
try {
Field field = obj.getClass().getDeclaredField(f.getName());
field.setAccessible(true);
if (field.get(obj) == null) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return false;
}
}