Swagger 2 에서 Pageable 이용하기
2019. 5. 29. 10:43ㆍSpring/Basic
반응형
Swagger 에서 Pageable 이용하기
@RequestMapping("/stores") @Api(tags = "store") @RestController public class StoreController { @ApiOperation(value = "메뉴 조회 with paging", notes="store의 id를 이용하여 가맹점의 메뉴를 페이징 처리하여 조회합니다.") @GetMapping(value="/{storeId}/menus") public Map<String, Object> findAllMenuByMenuId(@ApiParam(name="storeId", value="store 테이블 id", required=true) @PathVariable("storeId") long storeId, @PageableDefault(size=5, sort="name", direction = Sort.Direction.ASC) Pageable pageable) { return storeService.findAllMenuByStoreId(storeId, pageable); } }
http://localhost:8080/stores/1/menus?page=1&size=3
의 조회결과는 아래와 같다.
{ result: "success", storeName: "죠스떡볶이", menus: [{ price: 2000, name: "오뎅", id: 2 }, { price: 4000, name: "치즈떡볶이", id: 3 }, { price: 2000, name: "쿨피스", id: 6 } ], storeId: 1 }
JpaRepository가 상속받고 있는 PagingAndSortRepository에서는 Pageable 구현 클래스를 인자로 받아 정렬, 페이징 처리를 쉽게 처리해 줍니다.
이 기능을 swagger를 이용해서 api를 사용해보고 싶을 겁니다.
그런데 두둥!!
swagger에서 Pageable인자를 받는 api에서 page, size 가 아닌 pageNumber, pageSize 라는 이름으로 들어있어요.
그래서 실행시 에러가 납니다 😢
swagger에서 pageable 인자를 받고 싶다면 어떻게 해야할까요?
Swagger 설정 JavaConfig 에 AlternateTypeRules 을 설정해주면 됩니다.
바로 이렇게!
@Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .alternateTypeRules( AlternateTypeRules.newRule(typeResolver.resolve(Pageable.class), typeResolver.resolve(Page.class))) .groupName("jiniworld") .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.jiniworld.test.controllers")) .paths(PathSelectors.any()) .build(); } @Getter @Setter @ApiModel static class Page { @ApiModelProperty(value = "페이지 번호(0..N)") private Integer page; @ApiModelProperty(value = "페이지 크기", allowableValues="range[0, 100]") private Integer size; @ApiModelProperty(value = "정렬(사용법: 컬럼명,ASC|DESC)") private List<String> sort; }
위와 같은 대체룰을 설정 한 후, swagger 화면입니다.😄
728x90
반응형
'Spring > Basic' 카테고리의 다른 글
[Spring Boot] JPA와 MyBatis 동시에 사용하기 (2) | 2019.12.27 |
---|---|
[Spring Boot] Custom Banners (2) | 2019.08.02 |
[Spring Boot] 이미지 파일 경로 외부에 설정하기 with yml (5) | 2019.07.31 |
@Entity에 정의한 ddl 속성 db에 update 하기 (1) | 2019.03.29 |
spring boot 에서 JPA 사용하기 with MySQL (2) | 2019.03.06 |