java - 对象树结构的 JSON 序列化

标签 java json serialization jackson

当用关系序列化我的 POJO 时,我曾经为每个类创建不同的 View 。对于每个类,我创建了一个 View Basic,仅显示标量属性,以及Detail,其中包括我的所有关系。它看起来像这样:

public class Stage extends BasicDomainObject {

    @JsonView(Views.Stage.Basics.class)
    protected String stageType = "";

    @JsonView(Views.Stage.Basics.class)
    protected String scheduledReleaseGraph = "";

    @JsonView(Views.Stage.Details.class)
    private Pipeline pipeline;

    // ...
}

然后,在我的 REST api 层中,我可以通过指定正确的 View 来序列化正确的 View :

mapper.writerWithView(Views.Stage.Details.class).writeValueAsString(bean);

现在,我必须在我的 Stage 类中添加一个字段 private Stage ParentStage。我试图通过我的 Details View 获得如下所示的输出:

{
    "id": 2,
    "type": "dev",
    "scheduledReleaseGraph" "xxx",
    "pipeline" : {
         ...
    },
    "parent" : {
        "id": 1,
        "type": "dev",
        "scheduledReleaseGraph" "yyy"
    }
}

此处的目标是仅显示一层深度的关联。 实现这一目标的常见模式是什么?

最佳答案

如果您使用 Jackson 2.0,我会查看 JsonIdentityInfo 属性: https://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonIdentityInfo.html

此注释可帮助您在序列化/反序列化时处理循环引用。

关于java - 对象树结构的 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47908891/

相关文章:

java - 从 XML 读取信用卡号列表

java - 使用 Java Stream 条件映射到新对象

java - Couchbase、Spring 和 JPA

c++ - 在 Qt 插件类中读取自己的元数据

json - 如何使用 postman 创建新用户并在keycloak中分配组?

java - 如何禁止在写入文件时终止应用程序继续

java - 如何传入一个类来创建一个类数组?

Python:将 JSON 对象转换为 JSON 数组

scala - 有效地序列化案例类

php - 使用 SplObjectStorage 序列化对象树时出错