如何使用 Spring 有条件响应的 return REST 文档记录 REST 服务?

How to document REST services with Spring REST Docs that return a response conditionally?

我有一个 REST 服务,每个资源都有访问限制。假设我有以下服务:

GET /record/{recordId}

定义了每条记录的访问计数,当达到限制时,它returns一个例外。

我编写了一个集成测试,它创建了访问限制为 5 的记录,然后创建了一个通过 mockMvc 发送请求的循环。

当我查看 Spring REST 文档中的示例时,我看到 .andDo(...) 是在测试之后添加的,它为测试创建了片段。恐怕它会覆盖相同测试的片段。我想记录资源具有每个 resourceId 的访问限制,并提供资源何时可访问以及何时达到访问限制的示例。

对于这些情况,我应该使用 2 个文档 ID(见下文)吗?这是正确的方法吗?

@Test
public void testWithLimit(final String recordId, final String value, final int limit) throws Exception {
    for (int i = 0; i < limit; i++) {
        final ResultActions test = mockMvc.perform(get("/record/" + recordId));

        if (i < limit) {
            test.andExpect(status().isFound())
                .andExpect(jsonValue("$.value").exists())
                .andDo(document("resource-accessible"));
        } else {
            test.andExpect(status().isGone())
                .andExpect(validateException(RecordLimitExceededException.class))
                .andDo(document("resource-access-limit-reached"));
        }
    }
}

是的,对于这两种情况,我肯定会使用两个不同的文档 ID,这样您就可以获得针对这两种情况的一组片段。

这不是必需的,但您可能还想考虑在循环中只调用 document 两次:一次用于第一次成功的调用,一次用于预期达到限制时的最后一次调用。