카테고리 없음

spring swagger-ui

머룽 2023. 4. 19. 09:55

spring swagger-ui

swagger-ui는 테스트? 혹은 문서? 가 있는 UI를 제공 해준다. 한번 살펴 보자 maven에 다음과 같이 추가 하자
... 

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.4.0</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.4.0</version>
</dependency>

...
swagger 설정을 해주자
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket restApi() {
        // @formatter:off
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .build()
                .useDefaultResponseMessages(false)
                .globalResponseMessage(RequestMethod.GET,
                        Arrays.asList(
                                new ResponseMessageBuilder()
                                        .code(500)
                                        .message("server error")
                                        .responseModel(
                                                new ModelRef("Error")
                                        ).build()
                        )
                );
        // @formatter:on
    }

    private ApiInfo apiInfo() {
        // @formatter:off
        return new ApiInfoBuilder()
                .title("Spring boot Swagger")
                .description("api list")
                .contact(new Contact("wonwoo", "wonwoo.ml", "test@test.com"))
                .version("1.0.0")
                .build();
        // @formatter:on
    }
}
별거 없다. 상태 코드 500은 전부 적용을 한다는 뜻이다. 그리고 제목, 내용, 연락처, 버전 등 입력 할 수 있다. 그런다음에 controller class에 다음과 같이 어노테이션을 추가 하자
...

@Api(description = "사용자 API")
public class AccountController {
....
}

...
속성으론 value, tags, hidden 등 여러가지가 있다. 그리고 해당 메소드에 다음과 같이 추가하자.
...

@ApiOperation(value = "사용자 리스트", notes = "사용자 리스트를 가져옵니다.")
@RequestMapping(value = "/accounts", method = RequestMethod.GET, headers = "Accept=application/json")
public List<Account> getAccounts() throws JsonProcessingException {
    List<Account> accounts = accountRepository.findAll();
    return accounts;
}
...
해당 API 의 제목 및 내용이다. 그리고 해당 프로퍼티 명을 지정해 줄 수 있다.
...

@ApiModelProperty(value = "사용자 아이디")
private Long id;

...
또한 감출수도 있다.
...

@ApiModelProperty(hidden = true)
private List<Ordered> ordered;

...
완료 되었다. 한번 UI 에들어 가서 확인해보자 http://localhost:8080/swagger-ui.html