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 メソッド、または「include」タグの一部として .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 に答える