berryberrybin / board-project

0 stars 0 forks source link

[Swagger] pageable 타입 문제 및 해결책 #14

Closed berryberrybin closed 1 year ago

berryberrybin commented 1 year ago

문제

@Getter @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PRIVATE) public static class SearchFaqListByConditionRequest{ private String searchKeyword; private String faqCategoryName; }


### Postman 실행
- page, size,sort를 key로 적절한 값을 전달하면 문제 없음
<img width="861" alt="image" src="https://user-images.githubusercontent.com/67494127/199858848-1c6642fa-0924-4b39-bc25-ead445925ad6.png">

### Swagger 실행
- Swagger API 테스트시 화면에서는 size, page, sort를 설정할 수 없음
![image](https://user-images.githubusercontent.com/67494127/199858957-7e5cbf83-02e6-4d84-98b2-2499968ea45e.png)
berryberrybin commented 1 year ago

원인 및 해결방안

@Data
@ApiModel
static class MyPagable{
   @ApiModelProperty(value = "페이지 번호(0..N)")
   private Integer page;

   @ApiModelProperty(value = "페이지 크기", allowableValues="range[0, 100]")
   private Integer size;

   @ApiModelProperty(value = "정렬(사용법: 컬럼명, ASC|DESC)")
   private List<String> sort;

}
TypeResolver typeResolver = new TypeResolver();
@Bean
public Docke api() {
   final ApiInfo apiInfo = new ApiInfoBuilder()
      .title("제목")
      .description("<h3> abc의 restApi에 대한 문서 제공</h3>")
      .license("라이센스")
      .version("1.0")
      .build();
   return new Docket(DocumentationType.SWAGGER_2)
      .alternateTypeRules(AlternateTypeRules
      .newRule(typeResolver.resolve(Pageable.class), typeResolver.resolve(MyPagable.class))
      .apiInfo(apiInfo)
      .select()
      .apis(RequestHandlerSelectors.basePackage("abc.multiplex").paths(PathSelectors.and("/**/api/**")).build();
}
image