目前我们正在使用 JODD lib 进行 JSON 序列化。但它总是序列化空对象。我希望将对象非空对象序列化为 Json 字符串。我们怎么能做到这一点?
Expecting:
{payload={app={id=xxx, version=0, hash=asdf, riskData={}}}}
--->
{"payload":{"app":{"id":"xxx","version":0,"hash":"asdf"}}} // not to show riskdata.
我们在 Jodd 3.7.1 中使用 JsonSerializer。有什么帮助吗?
我们使用 Jodd 的场景是我们试图序列化一个嵌入式日志映射对象。
/* inside this Map, there could be several embedded objects. */
/* ie. {payload={app={id=xxx, version=0, hash=asdf, riskData={}}}} */
Map<String, Object> log;
由于此 Map 是从 JSON 字符串反序列化的,因此我们不能使用任何注释来标记空字段。我们希望使用 JsonSerializer 将这个 Map 对象序列化为 JSON 字符串,并排除任何具有空值的字段,例如空映射 (riskData) 或空列表。
我昨天深入研究了代码。并找到了一个可能的解决方案,即扩展默认的 JsonSerializers 如:
public class NonEmptyMapSerializer extends MapJsonSerializer {
@Override
public void serializeValue(JsonContext jsonContext, Map<?, ?> map) {
// If Map is empty. Skip it.
if (map.isEmpty()) return;
super.serializeValue(jsonContext, map);
}
}
/*-----When initiating a JsonSerializer-----*/
logAllSerializer = new JsonSerializer().withSerializer(Map.class, new NonEmptyMapSerializer());
其他类型也一样。
这个解决方案正确吗?它会导致任何意想不到的行为吗?或者您能提供其他更好的解决方案吗?我可以找到一个选项: .excludeNulls(true) 但仅排除 NULL 字段。'excludeEmpty' 是否有隐藏选项?
非常感谢!