如何记录递归数据结构以响应 Spring REST Docs

How to document recursive data structures in response with Spring REST Docs

我有一个关于 Spring Restdocs 的问题。其余调用之一我想记录 returns 一个递归数据结构,具有不同类型 children:叶和子树。叶子和子树具有不同的属性。例如:

{
    "id": "$",
    "left": {
        "id": "l",
        "left": {
            "id": "l1",
            "type": "leaf",
            "value": "Leaf 1"
        },
        "right": {
            "id": "l2",
            "type": "leaf",
            "value": "Leaf 2"
        },
        "type": "subtree"
    },
    "right": {
        "id": "l3",
        "type": "leaf",
        "value": "Leaf 3"
    },
    "type": "subtree"
}

我找不到如何使用 Spring Restdocs 记录那些递归数据结构。 有没有人有一些例子或可以帮助我。

我已经设置了一个 git 存储库,其中包含一些显示我的问题的代码: https://github.com/dibog/spring-restdocs-recursive-demo

此致, 迪特

这完全取决于您要记录的内容以及您要如何向用户描述内容。我会专注于两种不同类型的节点——子树和叶子——并提供描述它们格式的文档,并且树中的每个节点要么是叶子,要么是子树。

您可以使用 REST Docs 通过响应字段片段记录两种不同节点类型的结构,重点关注响应的特定部分:

responseFields(beneathPath("left.left").withSubsectionId("leaf"),
    fieldWithPath("id").description("ID of the node"),
    fieldWithPath("type").description("Type of the node. Always 'leaf' for leaf nodes"),
    fieldWithPath("value").description("Value of the node")),
responseFields(beneathPath("left").withSubsectionId("subtree"),
    fieldWithPath("id").description("ID of the node"),
    fieldWithPath("type").description("Type of the node. Always 'subtree' for nodes with children"),
    subsectionWithPath("left").description("Left-hand child node. Either a subtree or a leaf"),
    subsectionWithPath("right").description("Right-hand child node. Either a subtree or a leaf"))

在记录子树节点时使用 subsectionWithPath 允许您使用单个描述符覆盖整个子树。描述告知用户 leftright 的值将是一个节点,该节点可以是叶节点,也可以是另一个子树。