我正在尝试将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方法中,还是在作为'include'标记的一部分的.adoc文件中设置?
答案 0 :(得分:3)
这是mentioned in the documentation:
要配置请求的上下文路径,请使用
contextPath
上的MockHttpServletRequestBuilder
方法。
在您的示例中,您的应用程序称为myservice
,并且您正在请求/
。您的MockMvc调用应该如下所示:
this.mockMvc.perform(get("/myservice/").contextPath("/myservice"))
.andExpect(status().isOk())
.andDo(document("index"));
答案 1 :(得分:1)
我让它工作的方式是将context-path包含在其余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());
}
}