如何使用Spring REST Docs将顶级数组记录为响应有效负载

aag*_*era 9 java rest spring json spring-restdocs

我使用Spring REST Docs来记录REST API.我正在尝试记录以下API操作:

GET /subsystems
GET /subsystems/some_name
Run Code Online (Sandbox Code Playgroud)

例如,调用GET /subsystems/samba返回以下JSON对象:

{ 
  "id": "samba", 
  "description": "..." 
}
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码片段来使用Spring REST Docs来记录此API操作:

this.mockMvc.perform(
    get("/subsystems/samba").accept(MediaType.APPLICATION_JSON))
    .andExpect(status().isOk()).andDo(
        document("subsystem").withResponseFields(
            fieldWithPath("id").description("Subsystem name"),
            fieldWithPath("description").description("Subsystem description")));
Run Code Online (Sandbox Code Playgroud)

我的问题是第一个操作:调用GET /subsystems返回一个JSON数组:

[ 
  { 
    "id" : "samba", 
    "description" : "..." 
  }, 
  { "id" : "ownCloud", 
    "description" : "..." 
  },
  { "id" : "ldap", 
    "description" : "..." 
  } 
]
Run Code Online (Sandbox Code Playgroud)

我找不到任何显示如何在Spring REST Docs文档中记录此类结果的示例.我该怎么办?

Mic*_*ons 19

Spring Rest Doc 1.0完全可以实现这一点

this.mockMvc.perform(
    get("/subsystems").accept(MediaType.APPLICATION_JSON))
    .andExpect(status().isOk()).andDo(
        document("subsystem").withResponseFields(
            fieldWithPath("[].id").description("Subsystem name"),
            fieldWithPath("[].description").description("Subsystem description")));
Run Code Online (Sandbox Code Playgroud)

要记录阵列本身,请使用

this.mockMvc.perform(
    get("/subsystems").accept(MediaType.APPLICATION_JSON))
    .andExpect(status().isOk()).andDo(
        document("subsystem").withResponseFields(
            fieldWithPath("[]").description("An array of subsystems"),
            fieldWithPath("[].id").ignore(),
            fieldWithPath("[].description").ignore()));
Run Code Online (Sandbox Code Playgroud)

如果您只想记录数组本身,我忽略了其他两个字段.您也可以将两种解决方案结合起来.

请享用.

编辑:我从Andy Wilkinson那里了解到,如果您记录顶级数组,则所有字段都标记为已记录.因此,如果您只想记录数组,则可以安全地跳过忽略.

  • 我打开[问题](http://stackoverflow.com/questions/31162140/how-to-document-top-level-array-as-response-payload-with-spring-rest-docs)来改善文件 (2认同)