是否存在将Java对象序列化为JSON的模式?

时间:2014-08-19 02:23:36

标签: java json design-patterns

这个问题与关于如何将Java对象序列化为JSON表示的确切细节无关,而是与用于将Java对象序列化为JSON的可伸缩且可测试的模式有关。我正在维护的系统具有关于对象序列化的不同粒度级别的概念。例如,系统具有Project的概念。 Project包含以下字段:

  • 名称
  • 描述
  • 所有者
  • 任务列表
  • 更改历史记录
  • 其他元数据

序列化Project列表时,仅返回“摘要”信息很有用:

  • 名称
  • 描述
  • 所有者

省略更详细的内容。但是,当请求单个Project时,将返回包含所有内容的“详细”视图。系统中的大多数对象都有摘要和详细视图的概念,但我发现在大多数情况下,我要么返回太多或太少的信息。

要处理为哪个视图返回哪些属性,我只是对该类进行了注释,并描述了summarydetail视图:

@Json(summary = { "name", "description", "owner" },
      detail = { "name", "description", "owner", "tasks", "changes", ... }
class Project {
    private String name;
    ...
}

这很有效,但正如我上面提到的,我发现在大多数情况下,我要么回归太多,要么太少。我很想看看有哪种模式可以灵活地获取我需要的数据。如果我发现我需要返回我的数据的不同表示,我是否做错了?我应该选择一定数量的对象表示并坚持下去吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以将子类化与自动序列化框架一起使用。例如,使用JAXB(支持JSON和XML):

class DetailSummary {
    public @XmlElement String name;
    public @XmlElement String description;
    public @XmlElement String owner;
}

class Detail extends DetailSummary {
    public @XmlElement List<Task> tasks;
    ...
}

此方法允许多个级别的详细信息,但强制您将类用作简单记录。