仅在不为null或不为空的情况下,Gson序列化字段
我有需要将Java对象转换为json的要求。
我为此使用Gson,但我需要转换器仅序列化非null或非空值。
例如:
//my java object looks likeclass TestObject{
String test1;
String test2;
OtherObject otherObject = new OtherObject();
}
现在我的Gson实例将此对象转换为json看起来像
Gson gson = new Gson();TestObject obj = new TestObject();
obj.test1 = "test1";
obj.test2 = "";
String jsonStr = gson.toJson(obj);
println jsonStr;
在上面的打印中,结果是
{"test1":"test1", "test2":"", "otherObject":{}}
在这里我只是希望结果是
{"test1":"test1"}
由于test2为空,otherObject为空,我不希望它们被序列化为json数据。
顺便说一句,我使用的是Groovy / Grails,因此,如果有任何对此的插件会很好,如果没有关于自定义gson序列化类的建议,那将是很好的。
回答:
创建自己的 TypeAdapter
public class MyTypeAdapter extends TypeAdapter<TestObject>() { @Override
public void write(JsonWriter out, TestObject value) throws IOException {
out.beginObject();
if (!Strings.isNullOrEmpty(value.test1)) {
out.name("test1");
out.value(value.test1);
}
if (!Strings.isNullOrEmpty(value.test2)) {
out.name("test2");
out.value(value.test1);
}
/* similar check for otherObject */
out.endObject();
}
@Override
public TestObject read(JsonReader in) throws IOException {
// do something similar, but the other way around
}
}
然后,您可以使用进行注册Gson
。
Gson gson = new GsonBuilder().registerTypeAdapter(TestObject.class, new MyTypeAdapter()).create();TestObject obj = new TestObject();
obj.test1 = "test1";
obj.test2 = "";
System.out.println(gson.toJson(obj));
产生
{"test1":"test1"}
该GsonBuilder
班有一堆的方法来创建自己的序列化/反序列化战略,注册类型的适配器,等参数进行设置。
Strings
是番石榴课。如果您不需要这种依赖性,则可以自己进行检查。
以上是 仅在不为null或不为空的情况下,Gson序列化字段 的全部内容, 来源链接: utcz.com/qa/417238.html