🚨 API 문서화 파트 학습 도중 발생한 에러입니다. pathParameter를 추가하자 생긴 문제였는데, 갓-구글께서 해결해주셨습니다!
java.lang.IllegalArgumentException: urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?
위와 같은 화면이 나온다면 아마 나와 비슷한 상황을 겪고 있을 것이다. 에러 자체도 컴파일 에러가 아니라 런타임 에러이기 때문에 원인을 찾기 어려웠다.
바쁜 현대인을 위한 핵심 요약
1. 에러가 뜨는 시점은 pathParameters를 추가한 후로 예측할 수 있다.
2. MockMvc에서 사용하는 perform 메소드의 HTTP 요청을 확인한다. (get, post, patch, delete, put 중 하나일 것이다.)
3. import된 내용이 MockMvcRequestBuilders로 되어 있다면 지우고 RestDocumentationRequestBuilders로 import를 변경해준다. 이마저도 귀찮다면 아래 코드를 복사해서 사용하시길...
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch;
콘솔창 분석하기
에러가 발생하면 콘솔창에 있는 정보를 최대한 읽어보는게 좋기 때문에 한 번 읽어보겠다.
// (1)
urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?
java.lang.IllegalArgumentException: urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?
..
// 중간 생략
..
// (2)
MemberControllerRestDocsTest > patchMemberTest() FAILED
java.lang.IllegalArgumentException at MemberControllerRestDocsTest.java:156
너무 길어서 읽기 싫을 것을 나는 알고 있다. 그래서 번호를 붙여놨다.
(1)의 경우는 urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request? 라고 되어 있다. urlTemplate이라는게 없고, MockMvc를 사용중이라면 RestDocumentationRequestBuilders를 request를 빌드할 때 사용하라고 한다.(힌트 하나!)
내가 작성한 코드를 기준으로 (2)를 따라가보면 아래와 같은 코드를 가리키고 있다. document에 포함된 내용이 나올 것이라고 생각했다.(힌트 둘!)
.andDo(document("patch-member",
해결 방법
위에서 나온 힌트를 종합해보면 document에서 사용하는 무언가가 RestDocumentationRequestBuilders를 사용해서 문제를 해결하라는 것 같았다.
구글에 검색을 해서 찾아보다가 Spring 공식 문서에서 다음과 같은 내용을 확인할 수 있었다.
💡 To make the path parameters available for documentation, the request must be built using one of the methods on RestDocumentationRequestBuilders rather than MockMvcRequestBuilders.
내용은 path parameter를 문서화에 사용하려면 요청을 빌드할 때, MockMvcRequestBuilders을 사용하는 것보다 RestDocumentationRequestBuilders를 사용하는 것이 좋다고 한다.
* 공식 문서 링크(Path Parameters)
Spring REST Docs
Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test.
docs.spring.io
MockMvcRequestBuilders는 HTTP 요청시 사용하는 GET, POST, PATCH, DELETE를 Mock 객체로 빌드해주는 추상 클래스인데, 실습에서 사용할 때는 MockMvc의 perform 메소드 내부에서 patch 명령어를 사용하려고 import 했었다.
그래서 기존에 import한 MockMvcRequestBuilders를 지우고 아래와 같이 변경해주었다.
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch;
변경 후 결과창
😎
간단하지는 않았지만 해결할 수 있었습니다! 여러분도 해결하세요!
'Spring > Error' 카테고리의 다른 글
[H2] localhost에서 연결을 거부했습니다. 해결방법 (0) | 2023.07.05 |
---|---|
[Spring] IntelliJ에서 finished with non-zero exit value 1 에러 해결 (0) | 2022.10.28 |
[Spring] IntelliJ에서 Execution failed for task ':compileJava' 해결 (0) | 2022.10.23 |
[Spring] warning: unknown enum constant When.MAYBE 에러 해결 (0) | 2022.10.23 |