개요
개인 프로젝트에서 pagination을 구현하면서 @PageableDefault 라는 애노테이션을 새로 알게 되었다. 이번 글에서는 이 애노테이션이 어떤 기능을 제공하는지, 현재 프로젝트에서 이 기능을 어떻게 적용했는지 설명하도록 하겠다.
@PagableDefault 란?
@PageableDefault 애노테이션은 controller 메서드에서 Pagable 객체가 주입될 시, 해당 객체의 값이 전달되지 않을 경우에 기본값을 자동으로 설정해주는 기능을 제공한다.
@PagableDefault 코드를 자세히 살펴보자.
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface PageableDefault {
@AliasFor("size")
int value() default 10;
@AliasFor("value")
int size() default 10;
int page() default 0;
String[] sort() default {};
Direction direction() default Direction.ASC;
}
위의 코드를 보면 Pagable의 여러 필드를 기본 값으로 설정하는 것을 확인할 수 있다.
- size - 페이지당 크기를 설정한다. default = 10
- page - 현재 페이지 번호를 지정한다. default = 0
- sort - 정렬 기준을 지정한다.
- direction - 정렬 방향(오름차순 or 내림차순)을 지정한다. default = 오름차순
적용 예시
@GetMapping("/api/brands")
public PagedBrandResponse findAll(@RequestParam(required = false) Long categoryId,
@PageableDefault(sort = "id") Pageable pageable) {
...
}
위의 메서드는 현재 개인 프로젝트에 있는 controller 메서드 중 하나이다. 해당 메서드에 Pagable 객체를 전달받도록 파라미터로 설정하고 그 앞에 @PageableDefault 애노테이션을 지정하였다. 그리고, 기본 정렬 기준을 entity의 id 값으로 지정하였다.
이제 클라이언트에서 아래와 같은 path로 요청을 보낸다고 가정해보자.
/api/brands?categoryId=1&page=1&size=20
Query parameter로 전달된 Pagable 정보가 page=1&size=20 밖에 없는 것을 확인할 수 있다. 이 경우, page와 size를 제외한 나머지의 값들은 @PagableDefault에서 설정된 값으로 전달된다. 따라서, 최종적으로 전달되는 Pageable의 값들은 아래와 같다.
- size = 10
- page = 1
- sort = "id"
- direction = Direction.ASC
이렇게 @PageableDefault 애노테이션을 사용하면 더 적은 코드로 간단하게 Pageable의 기본값들을 지정할 수 있다.
'Spring' 카테고리의 다른 글
[Spring] @Scheduled를 사용한 메서드 스케줄링 (0) | 2024.06.17 |
---|---|
[Spring / AWS] Spring Boot 3 + AWS Lambda 사용하기 (0) | 2024.04.26 |
[Spring] MultipartFile Bean Validation (0) | 2024.01.26 |
[Spring] MultipartFile 테스트 시 405 Error가 생기는 이유 (0) | 2024.01.18 |
[Spring] MultipartFile 테스트하는 방법 (0) | 2024.01.17 |