spring-boot 버전 v2.7.x, gradle 환경에서 swagger을 적용해보자.
// swagger v3 적용 사항
dependencies {
implementation 'io.springfox:springfox-boot-starter:3.0.0'
}
// swagger v2 적용 사항
dependencies {
implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.7.0'
implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.7.0'
}
본인이 원하는 적당한 경로에 Swagger설정 클래스를 만들어 준다.
@Configuration
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.any()) // 특정 패키지경로 추적. 1차 필터
.paths(PathSelectors.regex("/api.*")) // 위의 apis중에서 특정 path조건 API만 문서화. 2차 필터
.build()
.groupName("API 1.0.0")
.securitySchemes(Arrays.asList(apiKey()))
.securityContexts(Arrays.asList(securityContext()));
}
private ApiKey apiKey() {
return new ApiKey("apiKey", "Authorization", "header");
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.operationSelector(o -> PathSelectors.regex("/api.*").test(o.requestMappingPattern()))
.build();
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("apiKey", authorizationScopes));
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("test Spring boot REST API")
.version("1.0.0")
.description("SWAGGER")
.build();
}
}
서버 구동했을때
Failed to start bean 'documentationPluginsBootstrapper' 라는 에러가 뜨는 경우
해결법
Spring Boot 2.6.0 이상부터 요청 경로를 ControllerHandler에 매칭시키기 위한 전략 기본값이ant-path-matcher에서 ant-path-pattern-parserfh로 변경 되었기 때문.
application.yml 파일에 아래와 같이 추가해주면 된다.
//application.yml
spring:
mvc:
pathmatch:
matching-strategy: ant-path-matcher
결과
http://localhost:8080/swagger-ui/ 로 접속하면 아래와 같이 나온다
swagger v2.0 버전을 사용하면 http://localhost:8080/swagger-ui.html로 접속
JAVA에서의 메모리 (0) | 2023.02.14 |
---|---|
form-data에 json list 바인딩(링크) (0) | 2022.09.01 |
ENUM name으로 문자열 가져오기 (0) | 2022.05.09 |
Oauth2 check_token 활성화 (0) | 2022.05.04 |
배열을 문자열로 변환(String.join()) (0) | 2022.04.03 |