我正在尝试使用Spring-RestDocs来记录我的REST服务。但是到目前为止,我还不能记录数组元素。
测试方法:
@Test
public void listAll() throws Exception {
MockHttpServletRequestBuilder requestBuilder =
RestDocumentationRequestBuilders.post("/diagnosis/search/{term}", "headache")
.header("Authorization",TestHelper.TOKEN).with(csrf());
TestHelper.httpRequestBuilder(requestBuilder, new SearchEntity("5b55aabd0550de0021097b64",Arrays.asList("PL01", "PL02"),true));
MvcResult result = mockMvc.perform(requestBuilder)
.andDo(DiagnosisDocument.documentSearchTerm())
.andExpect(status().isOk())
.andReturn();
MockHttpServletResponse response = result.getResponse();
System.out.println(response.getContentAsString());
assertEquals(HttpStatus.OK.value(), response.getStatus());
}文档化方法:
public static ResultHandler documentSearchTerm() {
return document("search-diagnosis", pathParameters(
parameterWithName("term").description("Term")),
requestFields(fieldWithPath("clinicId").description("bla bla")),
requestFields(fieldWithPath("isGlobalSearch").description("bla bla")),
requestFields(subsectionWithPath("[].planIds").description("bla bla")),
responseAPI(true));
}SearchEntity类:
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
public class DiagnosisSearchEntiry {
private String clinicId;
private List<String> planIds = new ArrayList<>();
private boolean isGlobalSearch;
}
But in this implementation, im getting following exception and the test fails.
org.springframework.restdocs.snippet.SnippetException: The following parts of the payload were not documented:
{
"planIds" : [ "PL01", "PL02" ],
"globalSearch" : true
}我得到这个错误有什么特殊的原因吗?我记录错了吗?提前感谢
发布于 2019-06-25 16:53:57
当DiagnosisSearchEntiry被序列化为JSON时,isGlobalSearch字段被映射到JSON中名为globalSearch的字段。您的请求字段路径需要更新以反映这一点:
requestFields(fieldWithPath("globalSearch").description("bla bla"))路径[].planIds正在查找具有planIds字段的对象数组。它将像这样匹配JSON:
[
{
"planIds": ["PL01", "PL02"]
},
{
"planIds": ["PL03", "PL04"]
}
]您正在记录的JSON的结构如下:
{
"clinicId": "the clinic id",
"planIds": [ "PL01", "PL02" ],
"globalSearch": true
}要记录计划ID数组,路径应为planIds.[]
requestFields(subsectionWithPath("planIds.[]").description("bla bla"))https://stackoverflow.com/questions/56733518
复制相似问题