Cuando una aplicación maneja grandes volúmenes de datos, enviar toda la información en una sola respuesta afecta directamente el rendimiento y la experiencia del usuario. La paginación es la técnica que permite dividir los resultados en bloques más pequeños, controlados por parámetros como la página actual y la cantidad de elementos por página. Con Spring Boot este proceso se simplifica gracias a interfaces especializadas que facilitan la implementación.
¿Cómo funciona PagingAndSortingRepository en Spring Boot?
El punto de partida es cambiar la interfaz que hereda nuestro repositorio. En lugar de utilizar JpaRepository, se pasa a heredar de PagingAndSortingRepository [0:28]. Esta interfaz incluye todos los métodos necesarios para trabajar con objetos de tipo Pageable, lo que permite realizar consultas paginadas sin escribir lógica adicional.
Al realizar este cambio, es probable que aparezcan errores de compilación. Esto ocurre porque el método findAll original devolvía un Iterable, y ahora debe adaptarse para retornar una lista de usuarios con la nueva firma del método [1:02]. La solución consiste en crear una implementación propia dentro de la interfaz UsersRepository que defina explícitamente el tipo de retorno como lista.
¿Qué ajustes se necesitan en el controlador REST?
Dentro de la clase UsersRestController se crea un nuevo método anotado con @GetMapping que expone la ruta de paginación [1:30]. Este método recibe dos parámetros mediante la anotación @RequestParam:
- page: número de página que se desea consultar.
- size: cantidad de elementos que se mostrarán por página.
El repositorio se inyecta a través del constructor, siguiendo buenas prácticas de inyección de dependencias [2:06]. Dentro del método, se invoca findAll pasando como argumento un objeto Pageable construido con la clase PageRequest y su método estático of(page, size) [2:38].
El resultado de findAll devuelve un objeto de tipo Page, y para obtener únicamente la lista de usuarios se llama al método getContent [2:55], que extrae los registros correspondientes a esa página.
¿Cómo probar el servicio de paginación con Postman?
Para verificar el funcionamiento se utiliza Postman con una petición GET a la ruta localhost:8081/app/api/users [3:12]. Los parámetros se envían como query params:
page=1&size=5 muestra cinco registros a partir de la segunda página.
page=0&size=3 retorna los tres primeros registros de la base de datos.
Es importante recordar que la paginación comienza en la página cero [3:55]. Si se indica page=1, los resultados corresponden al segundo bloque de datos. Al cambiar el valor de size, se controla cuántos elementos aparecen en cada respuesta.
¿Por qué la paginación mejora el rendimiento de la aplicación?
Esta estrategia resulta especialmente útil cuando existe un cliente front-end desarrollado con tecnologías como Angular o React [4:22]. En lugar de solicitar todos los registros de una sola vez, el cliente envía los parámetros de página y tamaño, y el servidor responde únicamente con el subconjunto de datos necesario.
Los beneficios principales son:
- Menor consumo de memoria en el servidor al procesar menos registros por solicitud.
- Tiempos de respuesta más rápidos al reducir el volumen de datos transferidos.
- Mejor experiencia de usuario al cargar la información de forma progresiva.
A nivel de infraestructura, esto se traduce en un mejor performance de la aplicación [4:38], ya que se evitan consultas masivas que podrían saturar tanto la base de datos como la red.
Si quieres llevar la práctica más allá, intenta crear tu propia implementación con un caso de uso dedicado a la paginación e inyectarlo como servicio, tal como se haría con métodos como getUser o createUser. Comparte tu solución en los comentarios.