Tool/VSCode&Cursor

Cursor + SpringBoot 개발설정3 + openapi

건담아빠 2024. 12. 13. 11:46

Springdoc이 Springfox보다 공식 문서도 잘되어 있고 꾸준히 업데이트 된다고 하여 이번에는 Springdoc로 설정하자.

 

개발환경 설정

의존성 추가

  • build.gradle (lombok 및 springdoc-openapi 추가)
...

dependencies {
    ...
    
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'

	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
}

...

 

openAPI Config 파일 추가

  • OpenApiConfig
package com.test.spring_boot_demo.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.Contact;

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

@Configuration
public class OpenApiConfig {

  @Bean
  public OpenAPI openAPI() {
    Info info = new Info()
        .title("Spring API 문서")
        .version("v1.0")
        .description("Spring Boot API 설명 문서")
        .contact(new Contact()
            .name("개발자")
            .email("developer@example.com"));

    return new OpenAPI()
        .info(info);
  }

  @Bean
  public GroupedOpenApi group1() {
    return GroupedOpenApi.builder()
        .group("1. Version 1")
        .pathsToMatch("/v1/**")
        .build();
  }

}

 

Controller API 파일 및 Model 추가

  • UserController
package com.test.spring_boot_demo.controller.v1;

import com.test.spring_boot_demo.model.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/v1/api/users")
@Tag(name = "User", description = "사용자 API")
public class UserController {

    @Operation(summary = "사용자 목록 조회", description = "모든 사용자 정보를 조회합니다.")
    @GetMapping
    public List<User> getAllUsers() {
        return new ArrayList<>();
    }

    @Operation(summary = "사용자 조회", description = "특정 사용자의 정보를 조회합니다.")
    @GetMapping("/{id}")
    public User getUser(
            @Parameter(description = "사용자 ID") @PathVariable Long id) {
        return new User();
    }

    @Operation(summary = "사용자 등록", description = "새로운 사용자를 등록합니다.")
    @PostMapping
    public User createUser(
            @Parameter(description = "사용자 정보") @RequestBody User user) {
        return user;
    }

    @Operation(summary = "사용자 정보 수정", description = "기존 사용자의 정보를 수정합니다.")
    @PutMapping("/{id}")
    public User updateUser(
            @Parameter(description = "사용자 ID") @PathVariable Long id,
            @Parameter(description = "수정할 사용자 정보") @RequestBody User user) {
        return user;
    }

    @Operation(summary = "사용자 삭제", description = "특정 사용자를 삭제합니다.")
    @DeleteMapping("/{id}")
    public void deleteUser(
            @Parameter(description = "사용자 ID") @PathVariable Long id) {
    }
}

 

  • User
package com.test.spring_boot_demo.model;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Data
@Schema(description = "사용자 정보")
public class User {

  @Schema(description = "사용자 ID", example = "1")
  private Long id;

  @Schema(description = "사용자 이름", example = "홍길동")
  private String name;

  @Schema(description = "이메일", example = "hong@example.com")
  private String email;
}

 

application 환경 설정

  • application.yml (application.properties를 삭제하고 yml파일 생성)
spring:
  application:
    name: spring-boot-api

springdoc:
  swagger-ui:
    enabled: true
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
    show-extensions: true

 

실행 및 확인

실행

 

확인

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