스프링 Data JPA에서 제공하는 페이징과 정렬은 검색 리스트를 조회하는데에도 사용할 수 있다.
@GetMapping("/members")
public Page<Member> list(Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
이렇게 API를 작성할때 Pageable을 파라미터로 받을 수 있다. 저번 포스트에서도 작성을 했었지만 Pageable은 인터페이스고 실제로는 PageRequest객체를 생성해서 파라미터에서 받을 수 있다.
/members?page=0&size=3&sort=id,desc&sort=username,desc
가 되겠다.
spring.data.web.pageable.default-page-size=20 /# 기본 페이지 사이즈/
spring.data.web.pageable.max-page-size=2000 /# 최대 페이지 사이즈/
@RequestMapping(value = "/members_page", method = RequestMethod.GET)
public Page<Member> list(@PageableDefault(size = 12, sort = "username",
direction = Sort.Direction.DESC) Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
이렇게 Member에 대한 Page타입으로 반환되었다고 치자. 그렇다고 Page로 반환해도 될까?
답은 아니다.
DTO로 반환해야 한다. 다음의 한줄을 추가한다.
@GetMapping("/members")
public Page<MemberDto> list(Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
Page<MemberDto> pageDto = page.map(MemberDto::new);
return pageDto;
}