Spring Swagger

2023. 4. 3. 17:32Spring

728x90

스웨거

REST API를 문서화하는 도구

build.gradle 추가

implementation 'org.springdoc:springdoc-openapi-ui:1.6.6'

Config 파일 생성

package com.example.yutnoribackend.configuration;

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

@Configuration
public class SwaggerConfig {
    @Bean
    public GroupedOpenApi publicApi(){
        return GroupedOpenApi
                .builder()
                .group("v1-definition") //group 이름 설정
                .pathsToMatch("/api/**") // 적용할 api주소
                .build();
    }

    // swagger 화면에서 표시 정보
    @Bean
    public OpenAPI springShopOpenAPI(){
        return new OpenAPI()
                .info(new Info().title("Yut-Nori API")
                        .description("Yut-Nori 프로젝트 API 명세")
                        .version("v0.0.1"));

    }
}

Controller에서 적용

@Tag(name = "posts", description = "게시물 API")
@RestController
@RequestMapping("/api/posts")
@RequiredArgsConstructor
public class PostsController {

    @Operation(summary = "get posts", description = "지역에 대한 posts들 가져오기")
    @ApiResponses({
            @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = PostsResponseDto.class))),
            @ApiResponse(responseCode = "400", description = "BAD REQUEST"),
            @ApiResponse(responseCode = "404", description = "NOT FOUND"),
            @ApiResponse(responseCode = "500", description = "INTERNAL SERVER ERROR")
    })
    @Parameters({
            @Parameter(name = "province", description = "시", example = "경기도"),
            @Parameter(name = "city", description = "도", example = "고양시"),
            @Parameter(name = "hashtag", description = "검색한 해시태그", example = "['#자장면', '#중국집']")
    })
    @ResponseBody
    @GetMapping( "")
    public PostsResponseDto getPosts(
            @RequestParam(value = "province") String province,
            @RequestParam(value = "city") String city,
            @RequestParam(value = "hashtag", required = false) @Nullable String hashtag
    ) {
        return new PostsResponseDto(1);
    }
}

확인

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

  • Srping Security로 인해 로그인 창이 뜰 경우
  • Id : user
  • pw :


참고자료

https://velog.io/@jeong-god/Spring-boot-Swagger-API-연동하기#controller-설정

'Spring' 카테고리의 다른 글

SpringSecurity_CORS 설정  (0) 2023.04.10
Spring Security Swagger 예외처리  (0) 2023.04.03
Spring Security  (0) 2023.04.03
JPA Mapping  (0) 2023.03.31
GenerationType  (0) 2023.03.31