Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

justsicklife

Spring boot Rest Api Web 프로젝트 따라하기 (1) swagger 연동 본문

프로젝트

Spring boot Rest Api Web 프로젝트 따라하기 (1) swagger 연동

구슬탈출 2024. 4. 20. 22:44

이번 깃허브 링크

 

GitHub - justsicklife/springboot_RestApi_Web_Project

Contribute to justsicklife/springboot_RestApi_Web_Project development by creating an account on GitHub.

github.com


build.gradle 

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'

 

의존성에 이걸 추가해주자


SwaggerConfig 클래스

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .components(new Components())
                .info(apiInfo());
    }

    private Info apiInfo() {
        return new Info()
                .title("Springdoc 테스트")
                .description("Springdoc을 사용한 Swagger UI 테스트")
                .version("1.0.0");
    }
}

일단 위코드를 작성하고 http://localhost:8080/swagger-ui/index.html 에 접속해보자

 

어노테이션과 메서드에 대해 살펴보면

@Bean 은 반환하는 객체를 스프링 IOC 에서 관리하는 빈(스프링에서 관리하는 객체를 빈이라고함) 으로 만들어줌

@Configuration @Bean 으로 지정된 객체를 싱글톤으로 만들어줌

 

info 생성자 API에 대한 메타데이터 작성 객체

title 제목

description 내용

version 버전


UserController

import com.restApi.restApiSpring.demo.Service.UserService;
import com.restApi.restApiSpring.demo.dto.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@Tag(name= "예제 APi", description = "Swagger 테스트용 API")
@RestController
@RequiredArgsConstructor
public class UserController {

    final UserService userService;

    @Operation(summary = "모든 회원 조회", description = "모든 회원 목록을 조회합니다.")
    @GetMapping("/users")
    public List<User> findAllUser() {
        return userService.findAll();
    }

    @Operation(summary = "회원 저장" ,description = "이름 과 이메일을 받아 저장합니다.")
    @PostMapping("/user")
    public int save(@Parameter(name = "email",required = true)
                        @RequestParam String email,
                    @Parameter(name = "name", required = true)
                        @RequestParam String name) {

        User user = User.builder()
                .email(email)
                .name(name)
                .build();

        return userService.save(user);
    }

    @Operation(summary = "회원 검색 (이름)" , description = "이름으로 회원을 검색합니다.")
    @GetMapping("/users/name/{name}")
    public List<User> findUserByName(@Parameter(name = "name",required = true) @PathVariable String name) {
        return userService.findByName(name);
    }

    @Operation(summary = "회원 검색 (이메일)",description = "이메일로 회원 검색합니다.")
    @GetMapping("/users/email/{email}")
    public User findUserByEmail(@Parameter(name = "email",required = true) @PathVariable String email) {
        return userService.findByEmail(email);
    }
}

Swagger 관련 어노테이션

@Tag 컨트롤러에 name 과 description 을 작성할수있다.

@Operation api에 summary 와 description 을 작성할수있다. 

@Parameter api에서 받는 파라미터를 정의할수있다.

 

만약 매게변수가 객체라면 @ParameterObject 를 사용하자

 

일단 위 코드를 작성하고 http://localhost:8080/swagger-ui/index.html 여기에 들어가서 보면 바로 이해할것이다.


User

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

@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "유저 dto")
public class User {

    @Schema(description = "유저 아이디")
    private Long userId;

    @Schema(description = "유저 이메일")
    private String email;

    @Schema(description = "유저 이름")
    private String name;
}

@Schema 를 정의할수있다


결과창