728x90
반응형
📚 참고자료
- 블로그 [호형] - Springboot에서 API Docs (Springdoc) 사용하는 방법 (1) => 링크
- 블로그 [호형] - Springboot에서 API Docs (Springdoc) 사용하는 방법 (2) => 링크
- 블로그 [soyeon207.log] - Swagger 란 ? (이론 + Spring boot 적용) => 링크
- SpringDoc 공식 문서 => 링크
Spring2.6 버전 이상에서 springfox-boot-starter:3.0.0를 dependencies에 추가한 후,
애플리케이션을 Run 하면 아래와 같은에러가 떴습니다.
rg.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null
검색해본 결과, Spring 2.6 버전과 springfox-boot-starter3.0.0 이 호환성 문제라는걸 알게되었습니다
여기서 해결책은
- Spring Boot 를 2.5x 버전대로 내리기
- application.yml 혹은 application.properties에 설정 추가
- SpringDoc 을 사용하기(아래에 정리한 코드)
저는 2.5x 버전으로 내리거나 무언가(설정)을 추가하는 방식이 아닌 세번째 SpringDoc을 사용하는걸 선택했습니다.
1️⃣ build.gradle 의존성 추가
implementation "org.springdoc:springdoc-openapi-ui:1.5.9"
위 코드를 build.gradle안에 있는 dependencies에 추가해줍니다.
2️⃣ SwaggerConfig
@OpenAPIDefinition(
info = @Info(title = "MatDi API",
description = "MatDi API 명세서.",
version = "v1"))
@Configuration
@RequiredArgsConstructor
public class SwaggerConfig {
@Bean
public GroupedOpenApi customTestOpenAPi() {
// /test 로 시작하는 API 들을 테스트 관련 API 로 그룹핑
// member 로 시작하는 API 를 그룹핑 하고 싶다 라고 하면 메소드 이름을 변경하고 하나 더 만들어서 설정하면 됨
String[] paths = {"/test/**"};
return GroupedOpenApi
.builder()
.group("MatDi API")
.pathsToMatch(paths)
.addOpenApiCustomiser(buildSecurityOpenApi()).build();
}
public OpenApiCustomiser buildSecurityOpenApi() {
// jwt token 을 한번 설정하면 header 에 값을 넣어주는 코드, 자세한건 아래에 추가적으로 설명할 예정
return OpenApi -> OpenApi.addSecurityItem(new SecurityRequirement().addList("jwt token"))
.getComponents().addSecuritySchemes("jwt token", new SecurityScheme()
.name("Authorization")
.type(SecurityScheme.Type.HTTP)
.in(SecurityScheme.In.HEADER)
.bearerFormat("JWT")
.scheme("bearer"));
}
}
Swagger를 설정 및 jwt token을 추가하는 코드입니다.
3️⃣ application.properties
springdoc.default-consumes-media-type= application/json
springdoc.default-produces-media-type= application/json
springdoc.swagger-ui.path= /swagger-ui.html
springdoc.swagger-ui.disable-swagger-default-url= true
springdoc.swagger-ui.display-query-params-without-oauth2= true
application.properties에 위에 해당하는 설정을 추가해줍니다.
4️⃣ Swagger 접속 URL
3.x : http://localhost:8080/swagger-ui/index.html
로컬 환경에서 애플리케이션을 Run 한다음에 위 url로 접속하면 됩니다.
반응형
'프로그래밍언어 & 프레임워크 > 스프링(Spring)' 카테고리의 다른 글
[테코톡] TDD와 단위테스트 (0) | 2022.03.17 |
---|---|
[팀프로젝트] 스프링 Cors 처리(WebMvcConfigurer) (0) | 2022.02.27 |
[항해99] 코드 커버리지 61% 달성(테스트 코드) (0) | 2022.02.04 |
[항해99] 테스트 환경 S3 Mock 서버 적용 (0) | 2022.02.04 |
토비의 스프링 공부법(백기선님 유튜브 참고) (0) | 2022.01.15 |