RestDocumentationRequestBuilders

mynameisjaehoon·2023년 12월 25일
0
post-thumbnail

java.lang.IllegalArgumentException: urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?

Spring Rest Docs를 적용하던중 위와 같은 에러메세지를 받았다.

// 기존 코드
mvc.perform(
        get("/api/v1/quiz/{quizId}", testQuizId)
    )
    .andExpect(status().isOk())
    .andDo(
        document(
            "단일 퀴즈 조회",
            pathParameters(
                parameterWithName("quizId").description("The quiz id.")
            ),
            responseFields(
                fieldWithPath("quizId").description("Quiz ID").type(Long.class),
                fieldWithPath("title").description("Quiz title").type(String.class),
                fieldWithPath("description").description("Quiz description").type(String.class),
                fieldWithPath("thumbnailData").description("Quiz thumbnail image data").type(String.class),
                fieldWithPath("likeCount").description("Quiz like count").type(Integer.class),
                fieldWithPath("playTime").description("Quiz play time").type(Integer.class),
                fieldWithPath("questions").description("Quiz questions").type(ArrayList.class)
            )));

에러메세지에 이미 정답이 적혀있는데 요청을 빌드할 때 MockMvc 대신 RestDocumentationRequestBuilders 를 사용하라는 것이다.

If you use MockMvc, to make the path parameters available for documentation, you must build the request by using one of the methods on RestDocumentationRequestBuilders rather than MockMvcRequestBuilders.

Spring Rest Docs 문서에도 경로 매개 변수를 문서에 사용할 수 있도록 하려면 MockMvc 대신 RestDocumentationRequestBuilders를 사용하라고 나와있다.

그래서 코드를 다음과 같이 변경하면 된다.

mvc.perform(
                RestDocumentationRequestBuilders.get("/api/v1/quiz/{quizId}", testQuizId)
    )
    .andExpect(status().isOk())
    .andDo(
        document(
            "단일 퀴즈 조회",
            pathParameters(
                parameterWithName("quizId").description("The quiz id.")
            ),
            responseFields(
                fieldWithPath("quizId").description("Quiz ID").type(Long.class),
                fieldWithPath("title").description("Quiz title").type(String.class),
                fieldWithPath("description").description("Quiz description").type(String.class),
                fieldWithPath("thumbnailData").description("Quiz thumbnail image data").type(String.class),
                fieldWithPath("likeCount").description("Quiz like count").type(Integer.class),
                fieldWithPath("playTime").description("Quiz play time").type(Integer.class),
                fieldWithPath("questions").description("Quiz questions").type(ArrayList.class)
            )));

0개의 댓글