Estoy usando Descanso de los datos de primavera Y estoy intentando paginar una consulta, pero no recibo toda la información que espero.

Mi repositorio se define como

public interface UserRepository extends PagingAndSortingRepository<User, String>
{
    List<User> findByNameContainingIgnoreCase(String name, Pageable pageable);
}

Cuando consulto esto usando esta URL

http://localhost:43434/api/users/search/findByNameContainingIgnoreCase?name=mic

Luego recibo la siguiente información. Está paginado, y si agrego &page=2 Luego hace iterar a través de las páginas. Sin embargo, no contiene información sobre la página actual, el número total de páginas, etc.

{
  "_embedded" : {
    "users" : [ {
      "name" : "Michael",
      "_links" : {
        "self" : {
          "href" : "http://localhost:43434/api/users/1"
        }
    }, 
    ... more users
    ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:43434/api/users/search/findByNameContainingIgnoreCase?name=mic"
    }
  }
}

Cuando miro users directamente I.E. http://localhost:43434/api/users/ Luego recibo una sección útil de enlaces y páginas (porque se define como PagingAndSortingRepository):

{
  ... first page of users...

  "_links" : {
    "first" : {
      "href" : "http://localhost:43434/api/users?page=0&size=20"
    },
    "next" : {
      "href" : "http://localhost:43434/api/users?page=1&size=20"
    },
    "last" : {
      "href" : "http://localhost:43434/api/users?page=49&size=20"
    }
    ... other links
  },
  "page" : {
    "size" : 20,
    "totalElements" : 1000,
    "totalPages" : 50,
    "number" : 0
  }
}

¿Por qué no recibo la misma información de paginación para las páginas de búsqueda que hago para la página principal de la colección? ¿Se implementa de manera diferente?

0
Michael 28 jun. 2019 a las 20:21

1 respuesta

La mejor respuesta

Ah, la respuesta estaba justo enfrente de mí en la documentación!

Para usar la paginación en sus propios métodos de consulta, debe cambiar el método. Firma para aceptar un parámetro adicional Pageable y devolver un Page en lugar de una lista.

El problema era que estaba devolviendo un List. Esto fallará en silencio, ya que mostrará los datos paginados, pero no mostrará los meta-datos sobre la página. Debe devolver un Page para exponer los meta-datos de la página.

public interface UserRepository extends PagingAndSortingRepository<User, String>
{
    Page<User> findByNameContainingIgnoreCase(String name, Pageable pageable);
}
1
Michael 28 jun. 2019 a las 17:28