본문 바로가기
컴퓨터 프로그래밍/Spring

[Spring] 페이지네이션 정리 코드

by 한33 2024. 10. 23.

Controller

// 식물사전 리스트 조회
@GetMapping("/v1/dictionaries")
public ResponseEntity<ApiResponse<Page<DictionaryListResponseDto>>> getDictionaryList(
        @RequestParam(defaultValue = "1") int page,
        @RequestParam(defaultValue = "10") int size) {
    return ResponseEntity.ok(ApiResponse.success(dictionaryService.getDictionaryList(page, size)));
}

 

🎯 @RequestParam 으로 page, size 를 받고 defaultValue 를 설정함으로서 다른 입력이 없으면 기본 값을 설정해준다.

 

🎯 Page<> 로 반환하고 싶은 스타일로 묶어준다.

 

Service

// 식물사전 리스트 조회
@Transactional(readOnly = true)
public Page<DictionaryListResponseDto> getDictionaryList(int page, int size) {
    // Pageable 객체 생성
    Pageable pageable = PageRequest.of(page - 1, size);

    // 식물사전 전체 조회
    Page<Dictionaries> dictionariesPage = dictionaryRepository.findAll(pageable);

    // Dto 변환
    Page<DictionaryListResponseDto> dtoPage = dictionariesPage.map(dictionaries -> {
       DictionaryListResponseDto dictionaryListResponseDto = new DictionaryListResponseDto(dictionaries.getTitle(), dictionaries.getUserName());
       return dictionaryListResponseDto;
    });
    return dtoPage;
}
// Pageable 객체 생성
Pageable pageable = PageRequest.of(page - 1, size);

 

🎯 Pageable 객체를 만들어준다.

  • 페이지 인덱스는 0 부터 시작하므로 사용자가 입력한 page 에서 1 을 빼준다.

Page<Dictionaries> dictionariesPage = dictionaryRepository.findAll(pageable);

 

🎯 DB 에 저장된 데이터를 페이징된 데이터로 바꿔준다.

 

페이징된 데이터로 바꾸면 위와 같은 메서드를 사용할 수 있다.


Application

@SpringBootApplication
@EnableJpaAuditing
@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
public class SpringUsersettingApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringUsersettingApplication.class, args);
    }
}

 

🎯 @EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)

어노테이션을 Application 위에 붙여서 출력되는 페이징된 객체를 간단하게 필요한 정보만 나오도록 간소화 시킬 수 있다.

'컴퓨터 프로그래밍 > Spring' 카테고리의 다른 글

[Spring] Swagger UI 적용  (3) 2024.11.02
[Spring] Soft Delete  (1) 2024.11.02
[Spring] Discord 알림 구현  (0) 2024.10.16
[Spring] TransactionalEventListener  (0) 2024.10.11
[Spring] Projection 및 예시코드 설명  (0) 2024.10.07