Spring Rest Docs 如何在我的代码片段或 .adoc 文件中包含应用程序名称
Spring Rest Docs How do I include the application name in my snippets or .adoc file
我正在尝试将 Spring Rest Docs 包含在 Spring 引导应用程序中,并已设法生成一个简单的 asciidoc HTML 文件,显示应用程序根目录的请求路径 ' /'。问题是代码段中的请求 URL 不包含应用程序名称?例如,我的应用程序名为 'myservice',所以我希望将根“/”请求路径记录为
$ curl 'http://localhost:8080/myservice/'
相反我只能生成
$ curl 'http://localhost:8080/'
我是 Spring Rest Docs 的新手,不知道如何在记录的 URL 中包含应用程序名称。它是在 asccidoctor 的 maven 插件中设置的,在测试的 @before 或 @Test 方法中 class 还是在 .adoc 文件中作为 'include' 标记的一部分?
这是mentioned in the documentation:
To configure a request’s context path, use the contextPath
method on MockHttpServletRequestBuilder
.
在您的示例中,您的应用程序名为 myservice
,而您正在请求 /
。您的 MockMvc 调用应如下所示:
this.mockMvc.perform(get("/myservice/").contextPath("/myservice"))
.andExpect(status().isOk())
.andDo(document("index"));
我让它工作的方法是将上下文路径包含为其余 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());
}
}
我正在尝试将 Spring Rest Docs 包含在 Spring 引导应用程序中,并已设法生成一个简单的 asciidoc HTML 文件,显示应用程序根目录的请求路径 ' /'。问题是代码段中的请求 URL 不包含应用程序名称?例如,我的应用程序名为 'myservice',所以我希望将根“/”请求路径记录为
$ curl 'http://localhost:8080/myservice/'
相反我只能生成
$ curl 'http://localhost:8080/'
我是 Spring Rest Docs 的新手,不知道如何在记录的 URL 中包含应用程序名称。它是在 asccidoctor 的 maven 插件中设置的,在测试的 @before 或 @Test 方法中 class 还是在 .adoc 文件中作为 'include' 标记的一部分?
这是mentioned in the documentation:
To configure a request’s context path, use the
contextPath
method onMockHttpServletRequestBuilder
.
在您的示例中,您的应用程序名为 myservice
,而您正在请求 /
。您的 MockMvc 调用应如下所示:
this.mockMvc.perform(get("/myservice/").contextPath("/myservice"))
.andExpect(status().isOk())
.andDo(document("index"));
我让它工作的方法是将上下文路径包含为其余 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());
}
}