Spring Boot 3.0에서 REST API 명세 문서화 - Swagger

코딩하는 하늘토끼·2023년 6월 20일

스프링부트 공부

목록 보기
7/15

프로젝트 환경

종류환경
IDEIntellij IDEA 2023.1.2 (Ultimate Edition)
언어SpringBoot 3.1.0
타입Gradle - Groovy
JDKcorretto-17
패키지 생성Jar
버전관리Github

의존성

종류이름
WebSpring web
Developer ToolsSpring Processor / Lombok
기타OpenAPI:2.0.2

dependency에 swagger 추가

코드

build.gradle

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

실행 결과

http://localhost:8080/swagger-ui/index.html


Swagger 문서 설정

코드

config/SwaggerConfig.java

package com.springboot.hello.config;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@OpenAPIDefinition(
        info = @Info(title = "제목",
                description = "설명",
                version = "1.0.0"
        )
)
@Configuration
public class SwaggerConfig {
    @Bean
    public GroupedOpenApi chatOpenApi() {
        String[] paths = {"/api/v1/**"};    // 명세서에 보여줄 경로 설정

        return GroupedOpenApi.builder()
                .group("예제 API v1")
                .pathsToMatch(paths)
                .build();
    }
}

결과

http://localhost:8080/swagger-ui/index.html


Controller 명세 세부 내용 작성

코드

controller/GetController.java

package com.springboot.hello.controller;

import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1/get-api")  
public class GetController {

    //Swagger 세부 내용 작성
    @GetMapping(value = "/request1")
    public String getRequestParam1(
            @Parameter(description = "이름", required = true, example = "sky bunny") String name,
            @Parameter(description = "이메일", required = true, example = "skybunny@gmail.com") String email,
            @Parameter(description = "조직", required = true, example = "home") String organization
    ) {
        return name + " " + email + " " + organization;
    }

실행 결과

0개의 댓글