Spring Restdocs 响应负载包含可选的空对象列表

Spring Restdocs response payload contains optional empty list of objects

我的 JSON 响应负载如下所示:

{
  "count": 2,
  "items": [
    {
      "k1": "v1",
      "k2": []
    },
    {
      "k1": "v2",
      "k2": [
        {
          "name": "joe"
        },
        {
          "name": "alice"
        }
      ]
    }
  ]
}

当我如下编写 Restdocs 时,我收到一个错误,抱怨 items[].k2 = [] 没有记录。

responseFields(
  fieldWithPath("count").description("..."),
  fieldWithPath("items[].k1").description("..."),
  fieldWithPath("items[].k2[].name").description("...")
)

我试着写 fieldWithPath("items[].k2[].name").description("...").optional(),但它什么也没做。

这是 Spring REST 文档中的错误。谢谢你让我注意到它。记录 items[].k2[].name 应该足以使 items[].k2 被视为已记录,因为它没有未记录的内容。我已经打开 this issue,因此可以修复 REST Docs 的行为。

将字段标记为可选字段告诉 REST Docs,如果该字段不存在,测试仍应通过。它对是否需要记录该字段没有影响。这就是为什么将字段标记为 optional 无法解决该问题的原因。

您可以通过显式记录 items[].k2:

来解决该问题
fieldWithPath("items[].k2").description("...")

或者,如果您不想在文档中为该字段添加条目,您可以告诉 REST Docs 忽略它:

fieldWithPath("items[].k2").ignored()