Ответ
Паганация — это разбиение большого набора данных на отдельные страницы (chunks). В Spring Data JPA это реализуется с помощью интерфейсов Pageable и Page.
Базовая реализация на стороне сервера:
-
Контроллер: Принимает параметры
page(номер страницы, с 0) иsize(размер страницы).@RestController @RequestMapping("/api/products") public class ProductController { @GetMapping public Page<Product> getProducts(Pageable pageable) { return productRepository.findAll(pageable); } }Запрос:
GET /api/products?page=0&size=20&sort=name,asc -
Репозиторий: Spring Data JPA автоматически поддерживает пагинацию в методах, возвращающих
Page<T>,Slice<T>илиList<T>.public interface ProductRepository extends JpaRepository<Product, Long> { Page<Product> findByCategory(String category, Pageable pageable); }
Структура ответа Page:
Ответ содержит не только данные, но и метаинформацию:
{
"content": [ ... ], // Массив элементов на текущей странице
"pageable": { ... },
"totalPages": 50,
"totalElements": 1000,
"size": 20,
"number": 0, // Текущий номер страницы
"first": true,
"last": false,
"empty": false
}
Дополнительные возможности:
Slice: Возвращает данные и информацию о наличии следующей страницы, но без подсчета общего количества элементов (более эффективно).- Кастомные запросы с пагинацией: Использование
@Queryс параметромPageable. - Клиентская реализация: На основе метаданных из ответа
Pageможно построить навигацию (номера страниц) или бесконечную прокрутку (infinite scroll).