Rather than return everything from a large result set, Spring Data REST recognizes some URL parameters that
will
influence the page size and starting page number. To add paging support to your Repositories, you need to extend
the
PagingAndSortingRepository<T,ID>
interface rather than the basic
CrudRepository<T,ID>
interface. This adds methods that accept a
Pageable
to control the number and page of results returned.
public Page findAll(Pageable pageable);
If you extend
PagingAndSortingRepository<T,ID>
and access the list of all entities, you'll get links to the first 20 entities. To set the page size to any other
number, add a limit parameter:
http://localhost:8080/people/?limit=50
To get paging in your query methods, you must change the signature of your query methods to accept a
Pageable
as a parameter and return a
Page<T>
rather than a
List<T>
. Otherwise, you won't get any paging information in the JSON and
specifying the query parameters that control paging will have no effect.
By default, the URL query parameters recognized are
page
, to specify page number
limit
, to specify how many results to return on a page, and
sort
to specify the query method parameter on which to sort. To change the names of the query parameters, simply call
the appropriate method on
RepositoryRestConfiguration
and give it the text you would like to use for the query parameter. The following, for example, would set the
paging parameter to
p
, the limit parameter to
l
, and the sort parameter to
q
:
@Override protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { config.setPageParamName("p") .setLimitParamName("l") .setSortParamName("q"); }
The URL to use these parameters would then be changed to:
http://localhost:8080/people/?p=2&l=50
Each paged response will return links to the previous and next pages of results based on the current page. If you are currently at the first page of results, however, no "previous" link will be rendered. The same is true for the last page of results: no "next" link will be rendered if you are on the last page of results. The "rel" value of the link will end with ".next" for next links and ".prev" for previous links.
{ "rel" : "people.next", "href" : "http://localhost:8080/people?page=2&limit=20" }
Spring Data REST also recognizes sorting parameters that will use the Repository sorting support.
To have your results sorted on a particular property, add a sort URL parameter with the name of the property
you want to sort the results on. You can control the direction of the sort by specifying a URL parameter composed
of the property name plus
.dir
and setting that value to either
asc
ordesc
. The following would use the
findByNameStartsWith
query method defined on the
PersonRepository
for all
Person
entities with names starting with the letter "K" and add sort data that orders the results on the name property in
descending order:
curl -v http://localhost:8080/people/search/nameStartsWith?name=K&sort=name&name.dir=desc