es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valores incoherentes devueltos por la paginación de Spring Boot.

Estoy intentando crear una función que devuelva una lista de un objeto con Page (de Spring Data).

El problema es que los valores devueltos “totalElements” y “totalPages” son incorrectos. Hay 10 elementos, pero totalElements = 110 y totalPages = 2, cuando los 10 elementos entran fácilmente en una página de 100 elementos.

PD: Me veo obligado a utilizar el objeto MongoTemplate en el que no hay una función find que tome un Pageable. Así que estoy obligado a crearlo manualmente.

El código que estoy usando:

PageableExecutionUtils.getPage(orders, pageable, () -> orders.size());

los pedidos son una lista de mis resultados (que son correctos), la página se define como sigue:

Pageable pageable = new PageRequest(pageIndex, numberOfTransactionsPerPage);

Gracias por todo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para el error de retorno incorrecto de “totalElements” y “totalPages” en el objeto Page de Spring Data

    Como experto en TI especializado en Spring Boot, paginación y MongoTemplate, recomiendo la siguiente solución para el problema del retorno incorrecto de “totalElements” y “totalPages” en el objeto Page de Spring Data:

    1. Primero, asegúrese de que la lista de pedidos (List<order> orders) que está utilizando para crear el objeto Page sea correcta y contenga solo los elementos deseados.
    2. Cree un objeto Pageable con los parámetros correctos. Por ejemplo:

    Pageable pageable = PageRequest.of(pageIndex, numberOfTransactionsPerPage);
    
    1. En lugar de utilizar el método getPage de PageableExecutionUtils, utilice el constructor de la clase PageImpl para crear manualmente el objeto Page:
    Page<order> ordersPage = new PageImpl<>(orders, pageable, orders.size());
    

    Aquí, orders es la lista de pedidos, pageable es el objeto Pageable y orders.size() es el número total de elementos.

    1. Utilice el objeto ordersPage para acceder al número correcto total de elementos y al número correcto total de páginas:
    int totalPages = ordersPage.getTotalPages();
    long totalElements = ordersPage.getTotalElements();
    

    Esto le dará los valores correctos para “totalElements” y “totalPages”.

    Espero que esta solución le ayude a resolver el problema. Háganme saber si tienen alguna pregunta.

Comments are closed.