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

时间:2019-06-20 09:02:35

标签: java spring spring-restdocs

我的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(),但是它什么也没做。

1 个答案:

答案 0 :(得分:1)

这是Spring REST文档中的错误。感谢您引起我的注意。 items[].k2[].name的文档应该足以使items[].k2被文档化,因为它没有未文档化的内容。我已打开this issue,以便可以修复REST Docs的行为。

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

您可以通过明确记录items[].k2来解决此问题:

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

或者,如果您不想在文档中为此字段输入任何内容,则可以告诉REST文档忽略它:

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