본문 바로가기

Spring Boot

[Spring Boot] SpringBoot 3.x Swagger 적용

BE 재원

 

Spring Boot ver : 3.1.0

 

Java ver : 17

 

[ build.gradle 설정 ]

1. springdoc-openapi-ui:1.6.9 적용 [실패]

dependencies {
    implementation 'org.springdoc:springdoc-openapi-ui:1.6.9'
}

2. springdoc-openapi-ui:1.7.0 적용 [실패]

dependencies {
    implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
}

3. Springfox Swagger 3.0.0 적용 [실패]

dependencies {
	implementation 'io.springfox:springfox-swagger2:3.0.0'
	implementation 'io.springfox:springfox-swagger-ui:3.0.0' 
    // or
    implementation 'io.springfox:springfox-boot-starter:3.0.0'
    // Swagger 3.0.0 부터는 1개의 종속성만 추가해도 됨
    // localhost:8080/swagger-ui/index.html
}

4. springdoc-openapi-starter-webmvc-ui 적용 [성공]

# build.gradle

dependencies {
    // swagger
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
}

 

# SwaggerConfig.java

import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import lombok.RequiredArgsConstructor;

@OpenAPIDefinition(
        info = @Info(title = "타이틀 : 제목 작성",
                description = "간단한 description 작성",
                version = "v1"))
@RequiredArgsConstructor
@Configuration
public class SwaggerConfig {

    @Bean
    public GroupedOpenApi chatOpenApi() {
        String[] paths = {"/v1/**"};

        return GroupedOpenApi.builder()
                .group("나만의 서비스")
                .pathsToMatch(paths)
                .build();
    }
}

 

# TestController.java

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1")
public class TestController {

    private final TestService testService;

    /**
     * Swagger 작동 테스트 Controller
     */
    @GetMapping("/say/test")
    public String testConOne(String inputSomething) {
        return inputSomething;
    }

    @GetMapping("/say/haha")
    public String testTwo(String gogo) {
        return gogo;
    }

    @GetMapping("/say/getDate")
    public String connDB() {
        String time = testService.timeTest();
        return time;
    }
}

 

# application.yml -> [연구중]

# swagger
springdoc:
  swagger-ui:
    path: /swagger-ui.html
    groups-order: DESC
    operationsSorter: method
    disable-swagger-default-url: true
    display-request-duration: true
  api-docs:
    path: /api-docs
  show-actuator: true
  default-consumes-media-type: application/json
  default-produces-media-type: application/json
  paths-to-match:
    - /v1/**

상기 paths-to-match 는 효과가 있는것인가?

 

일딴 상기처럼 설정해주면 swagger 정상 작동함.

 

localhost:8080/swagger-ui.html

or

localhost:8080/swagger-ui/index.html

 

 

References

https://stackoverflow.com/questions/74614369/how-to-run-swagger-3-on-spring-boot-3

 

How to run Swagger 3 on Spring Boot 3

Using a fresh Spring Initialzr with Java17 and Spring Boot 3.0.0, and an extra addition to the pom.xml for Springfox Swagger 3, I can't for the life of me get Swagger pages to work. Instead, I get ...

stackoverflow.com

https://velog.io/@kjgi73k/Springboot3%EC%97%90-Swagger3%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

 

Springboot 3.x에 Swagger를 적용시켜보자!

Springboot 3.0.1에서 Swagger 3.0.0을 적용 중 발생하는 에러들을 해결해 보자

velog.io