Swagger


swagger에 대해 간단히 설명하자면 annotation(@) 기반의 REST API 명세서를 자동적으로 만들어 주는 framework다.

  • 장점
  1. annotation 기반으로 작성하기 때문에 개발과 API 명세서를 동시에 작성 할 수 있다.
  2. 브라우저에서 URL 기반으로 접근하여 쉽게 테스트가 가능하다.
  3. 프런트 개발자와의 협업에서 용이하다.
  • 단점
  1. annotation 기반으로 API 명세서를 작성하기 떄문에 코드가 매우 지저분해짐.
  2. API 명세서 작성 히스토리를 관리하기 어렵다.

    문제


parameter

parameter_code

UserDetailsImpl 클래스 아래 빨간 박스 부분이 추가 되었다는 것을 확인 할 수 있다. 위에서도 언급했다시피 swagger는 annotation 기반 API 명세서를 작성해준다.

parameter_code2

CertifyController 클래스에 createCertify를 확인해 보면 입력 파라미터로 @AuthenticationPrincipal UserDetailsImpl userDetails를 받는 것을 확인 할 수 있다. 아마 저 annotation 때문에 swagger에서 필수 파라미터로 받는 것이라 생각했다.

해결 방법


parameter_solution

SwaggerConfig 클래스 Docket 컨테이너에 아래 코드를 추가했다.

  1. ignoredParameterTypes: @AuthenticationPrincipal annotation을 사용하면서 해당 API에 요청 param으로 요구되어 이를 무시하기 위한 설정.
  2. useDefaultResponseMessages: swagger에서 기본적으로 제공하는 응답 메세지 사용 여부를 설정 swagger API 명세서에서 공간만 차지하는 것 같아 false로 했다.

parameter_solution2

해결완료!!

+ Recent posts