본문 바로가기

Backend/Spring

SpringFox 3.0.0 Server URL Error

기술 스택

OpenJDK 17.0.5

Spring Boot 2.7.7

SpringFox 3.0.0

발단

스테이징 서버에서 Swagger의 Server URL을 등록해주다가 발견한 문제.

@Configuration
public class SwaggerConfiguration {

    @Bean
    public Docket swagger() {
        return new Docket(DocumentationType.OAS_30)
                .servers(new Server("", "https://xxx.com", "", new ArrayList<>(), new ArrayList<>()))
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }
}

Docket으로 서버의 URL을 넣어줬는데 적용이 안됐다.

동일하게 Docket.host() 메소드를 사용했을 때도 적용이 안됐다.

해결과정

열심히 구글링을 해서 나와 같은 에러를 찾았다.

https://github.com/springfox/springfox/issues/3950

스웨거 타입이 OpenAPI 3.0 일 때 Docket.host() 가 안먹는다는 내용이다.

그런데 이슈가 활성화되지 않아 클로즈되어있어 다시 구글링 해서 아래의 동일한 이슈를 찾았다.

https://github.com/springfox/springfox/issues/3483

다행히 동일한 이슈가 열려 있었다.

3.0.1에서 해결해 주신다고 하셨지만, 3.0.0 Release가 Jul 14, 2020, 3.0.1 마일스톤즈가 49% complete인 것으로 보아, 당분간 해결될 일이 없을 것 같다.

친절하게 알려주신 #3445 이슈로 이동해봤다.

https://github.com/springfox/springfox/issues/3445

 

WebMvcOpenApiTransformationFilter 를 구현해 서버 URL을 설정해줄 수 있었다.

결론

@Component
public class SpringfoxSwaggerBasePathResolver implements WebMvcOpenApiTransformationFilter {

    @Value("${spring.swagger.server.url}")
    private String url;

    @Override
    public OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) {
        OpenAPI openApi = context.getSpecification();
        Server localServer = new Server();
        localServer.setUrl(url);
        openApi.setServers(List.of(localServer));
        return openApi;
    }

    @Override
    public boolean supports(DocumentationType documentationType) {
        return documentationType.equals(DocumentationType.OAS_30);
    }
}

이렇게 필터를 통해 해결했다.

'Backend > Spring' 카테고리의 다른 글

@Transactional 전파 전략  (0) 2023.05.07
DI와 IoC  (0) 2023.04.07
Spring Container와 Bean의 Lifecycle  (0) 2023.04.07
Spring Boot Controller Test  (0) 2023.04.07
Spring Session With Redis 설정하기  (0) 2023.03.09