3

我正在尝试将 Spring Rest Docs 包含在 Spring Boot 应用程序中,并设法生成了一个简单的 asciidoc HTML 文件,该文件显示了应用程序根目录“/”的请求路径。问题是代码段中的请求 URL 不包含应用程序名称?例如,我的应用程序被称为“myservice”,所以我希望根“/”请求路径记录为

$ curl ' http://localhost:8080/myservice/ '

相反,我只能生成

$ curl ' http://localhost:8080/ '

我是 Spring Rest Docs 的新手,无法弄清楚如何在记录的 URL 中包含应用程序名称。它是在 asccidoctor 的 maven 插件中、在测试类的 @before 或 @Test 方法中还是在 .adoc 文件中作为“包含”标签的一部分设置的?

4

2 回答 2

3

文档中提到了这一点:

要配置请求的上下文路径,请使用contextPathon 方法MockHttpServletRequestBuilder

在您的示例中,您的应用程序被调用myservice并且您正在请求/. 您的 MockMvc 调用应如下所示:

this.mockMvc.perform(get("/myservice/").contextPath("/myservice"))
        .andExpect(status().isOk())
        .andDo(document("index"));
于 2015-12-18T18:57:17.453 回答
1

我让它工作的方式是将上下文路径作为其余 URI 的一部分包含在内,并在 RequestBuilder 上调用 contextPath。这是工作示例。在我的示例中,“api”是上下文根。我必须将它包含在请求中,并在 RequestBuilder 上调用 contextPath 方法并进行设置。

@Andy Wilkinson:我知道这可能是在重复你所说的,但我认为一个完整的工作示例对于像我这样的人来说会更清楚:)

@RunWith(MockitoJUnitRunner.class)
public class UserControllerTest {


    private UserController controller;

    private MockMvc mockMvc;

    @Rule
    public RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets");

    @Before
    public void setUp() {

        controller = new UserController();
        mockMvc = standaloneSetup(controller).apply(documentationConfiguration(this.restDocumentation)).build();
    }

    @Test
    public void testUsers() throws Exception {

        this.mockMvc.perform(get("/api/users/{userId}","1234").contextPath("/api"))
                .andExpect(status().isOk())
                .andDo(document("user-information", pathParameters(
                        parameterWithName("userId").description("user id.")
                ), responseFields(
                        fieldWithPath("firstName").description("first name of the user. "),
                        fieldWithPath("lastName").description("Last name of the user. ")

                )))
                .andDo(print());

    }
}
于 2016-04-26T18:31:09.333 回答