Почему поиск Spring Data REST возвращает страницу без информации о странице? - PullRequest
0 голосов
/ 28 июня 2019

Я использую Spring Data REST и пытаюсь разбить запрос на страницы, но не получаю всю ожидаемую информацию.

Мой репозиторий определен как

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

Когда я запрашиваю это, используя этот URL

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

Тогда я получаю следующую информацию.Он разбит на страницы, и если я добавлю &page=2, то он будет перебирать страницы.Тем не менее, он не содержит информацию о текущей странице, общее количество страниц и т. Д.

{
  "_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"
    }
  }
}

Когда я смотрю на users непосредственно, то есть http://localhost:43434/api/users/, тогда я получаю удобный раздел ссылок и страниц (потому что он определен как 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
  }
}

Почему я не получаю ту же информацию о нумерации страниц для страниц поиска, что и для главной страницы коллекции?Это реализовано по-другому?

1 Ответ

0 голосов
/ 28 июня 2019

Ах, ответ был прямо передо мной в документации !

Чтобы использовать подкачку в ваших собственных методах запросов, вам нужно изменить сигнатуру метода, чтобы она принималасьдополнительный Pageable параметр и возвращает Page вместо List.

Проблема заключалась в том, что я возвращал List.Это молча завершится ошибкой, так как отобразит разбитые на страницы данные, но не отобразит метаданные о странице.Вы должны вернуть Page, чтобы предоставить метаданные страницы.

public interface UserRepository extends PagingAndSortingRepository<User, String>
{
    Page<User> findByNameContainingIgnoreCase(String name, Pageable pageable);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...