Swagger
swagger에 대해 간단히 설명하자면 annotation(@) 기반의 REST API 명세서를 자동적으로 만들어 주는 framework다.
- 장점
- annotation 기반으로 작성하기 때문에 개발과 API 명세서를 동시에 작성 할 수 있다.
- 브라우저에서 URL 기반으로 접근하여 쉽게 테스트가 가능하다.
- 프런트 개발자와의 협업에서 용이하다.
- 단점
- annotation 기반으로 API 명세서를 작성하기 떄문에 코드가 매우 지저분해짐.
- API 명세서 작성 히스토리를 관리하기 어렵다.
문제
UserDetailsImpl 클래스 아래 빨간 박스 부분이 추가 되었다는 것을 확인 할 수 있다. 위에서도 언급했다시피 swagger는 annotation 기반 API 명세서를 작성해준다.
CertifyController 클래스에 createCertify를 확인해 보면 입력 파라미터로 @AuthenticationPrincipal UserDetailsImpl userDetails를 받는 것을 확인 할 수 있다. 아마 저 annotation 때문에 swagger에서 필수 파라미터로 받는 것이라 생각했다.
해결 방법
SwaggerConfig 클래스 Docket 컨테이너에 아래 코드를 추가했다.
- ignoredParameterTypes: @AuthenticationPrincipal annotation을 사용하면서 해당 API에 요청 param으로 요구되어 이를 무시하기 위한 설정.
- useDefaultResponseMessages: swagger에서 기본적으로 제공하는 응답 메세지 사용 여부를 설정 swagger API 명세서에서 공간만 차지하는 것 같아 false로 했다.
해결완료!!