【发布时间】:2015-09-30 19:28:57
【问题描述】:
当我们打开嵌套对象并将其字段写入主对象时,有一个众所周知的案例,我需要做一个逆向任务。
我有一个 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 的结构,所以我看到了 3 种可能的方法:
- 编写自定义序列化程序。但在我看来,编写这样的序列化程序比手动序列化对象需要更多的努力。
- 创建将反映 JSON 正确结构的代理 Java 对象,并序列化此类代理。
- 在生成 JSON 后对其进行修改。 (恐怕重读和重写 JSON 的开销会很大)。
有没有人制作这样的序列化器,或者可能知道其他选项来生成具有我需要的结构的 JSON?
对于custom serializer,我想重用标准的BeanSerializer,不想手动写出所有字段:
- 隐藏带注释的字段。
- 写出 bean,不带注释字段,但不要关闭对象。 (请勿拨打
jgen.writeEndObject();) - 写出包装的字段。
- 关闭对象。
【问题讨论】:
-
sgrillon 解决方案适合您吗?