有一个已知的好的案例,当我们展开嵌套对象并将其字段写入主对象时,我需要做一个反向任务。
我有一个POJO:
class A {
private String id = "id1";
@JsonWrap("properties")
private String property1 = "...";
@JsonWrap("properties")
private String property2 = "...";
// getters and setters
}
默认的序列化器将按预期产生结果。
{
"id": "id1",
"property1": "...",
"property2": "..."
}
然而,我的JSON应该符合某些规范,为了做到这一点,我需要将property1
和property2
包装在properties
包装器内。所以结果应该如下所示:
{
"id": "id1",
"properties":
{
"property1": "...",
"property2": "..."
}
}
我不想改变POJO的结构,因此我看到了三种可能的方法:
- 编写自定义序列化程序。但是我认为编写这样的序列化程序需要更多的工作量,比手动序列化对象还要困难。
- 创建代理Java对象,反映JSON的正确结构,并对此类代理进行序列化。
- 在生成JSON后修改它。(我担心这会对JSON的重新读取和重写造成很大的开销)。
对于“自定义序列化程序”,我想重用标准的BeanSerializer,我不想手动写出所有字段:
- 隐藏注释字段。
- 写出bean,不包括注释字段,但不关闭对象。(不调用jgen.writeEndObject();)
- 写出包装字段。
- 关闭对象。