swagger 연결

프로젝트에 swagger를 연결해보려고 한다.
이전 프로젝트에서 2.x 버전을 사용해서 이번에는 3.x 버전을 사용해보기로 했다.

3.0.0 에러 발생

plugins {
	id 'org.springframework.boot' version '2.6.4'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

dependencies {
	implementation 'io.springfox:springfox-boot-starter:3.0.0'
	implementation 'io.springfox:springfox-swagger-ui:3.0.0'
}

swagger를 추가하는 방법은 간단하다. build.gradle에 의존성을 추가하고
config 클래스를 생성해주면 된다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .useDefaultResponseMessages(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.haniwon"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Practice Swagger")
                .description("practice swagger config")
                .version("1.0")
                .build();
    }
}


org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

에러가 발생했다.
찾아보니, spring boot버전과 swagger 버전사이의 충돌때문에 발생한 일이라고 한다.

spring boot 버전을 낮추느냐, swagger 버전을 낮추느냐 두 가지 방법으로 해결 가능할 것 같은데
나는 어차피 java11으로 docker도 사용하지 않고 개발 예정이라서 spring boot 버전이 낮더라도 큰 영향이 없을 것으로 판단된다.
그래서 2.3.0버전으로 낮췄다.

plugins {
//	id 'org.springframework.boot' version '2.6.4'
	id("org.springframework.boot") version "2.3.0.RELEASE"
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

dependencies {
	implementation 'io.springfox:springfox-boot-starter:3.0.0'
	implementation 'io.springfox:springfox-swagger-ui:3.0.0'
}

그랬더니 다른 오류가 발생했다.

java.sql.SQLException: The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

이거는 낯익은 예외다!!
db랑 타임존만 맞추면 해결될 것으로 추측된다

#spring.datasource.url=jdbc:mysql://localhost/hani
spring.datasource.url=jdbc:mysql://localhost:3306/hani?serverTimezone=UTC&characterEncoding=UTF-8

디비 url에 서버타임존을 설정하고 추가하는 김에 인코딩값도 같이 넣어줬더니 정상적으로 작동한다.

버전을 2.5.2로 낮춰도 작동한다는 글을 보고 다시 변경했다.
그리고 http://localhost:8080/hello 에 접속하니 그냥 index라는 글자만 보인다;;;;
대신 http://localhost:8080 에서는 index.html 파일을 불러온다.
그리고 http://localhost:8080/swagger-ui 에서 정상적으로 연결된 내용을 볼 수 있다.

참고한 블로그
https://bobr2.tistory.com/entry/Spring-Boot-Project-Initializr-Swagger-%EC%97%B0%EA%B2%B0-3

좋은 웹페이지 즐겨찾기