number나 size, sort등을 설정할 수 있는 화면이 없다. 대신 비슷한 녀석들이 있기는 한데 이렇게 나온 이유는 Pageable interface의 property 이름이 위와 같기 때문이다. 하지만 Pageable의 실제 구현체는 PageRequest이고 이녀석의 생성자는 아래와 같다. 그리고 PageRequest의 상위 클래스인 AbstractPageRequest에서 page와 size를 사용한다.
protected PageRequest(int page, int size, Sort sort) {
super(page, size);
Assert.notNull(sort, "Sort must not be null!");
this.sort = sort;
}
즉 파라미터로 선언한 interface인 Pageable과 구현체의 property 이름이 서로 달라서 생긴 문제이다. 따라서 전체적으로 Pageable을 걷어내고 PageRequest를 써도 되겠지만 Swagger를 위해서 유연성을 헤친다는 것은 또 웃긴 일이다.
Swagger 설정 수정
따라서 Swagger에게 어떤 타입이 왔을 때 이것을 다른 것으로 변경해서 처리할 수 있도록 설정해줄 필요가 있다. 이를 위해 페이징 정보를 저장하기 위한 클래스를 만들어보자.
그리고 Docket 객체를 만들면서 Pageable 대신 MyPageable을 사용하도록 설정해준다.
TypeResolver typeResolver = new TypeResolver();
@Bean
public Docket api() {
final ApiInfo apiInfo = new ApiInfoBuilder()
.title("QuietJun's 이것 저것")
.description("<h3>xyz.quietjun에서 제공되는 RestApi에 대한 문서 제공</h3>")
.license("MIT 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("xyz.quietjun.multiplex"))
.paths(PathSelectors.ant("/**/api/**"))
.build();
}