Как получить фактический порядок сортировки, который использовался для получения коллекции? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть запрос на получение коллекции пользователей, где коллекция может быть отсортирована, если запрашивается определенный порядок сортировки, например:

http://localhost:8080/api/users?page=0&size=5&sort=email,asc

Но она также сортируется с использованием сортировки по умолчаниюпорядок, если в запросе явно не указан порядок сортировки, например:

http://localhost:8080/api/users?page=0&size=5

В этом последнем случае сортировка выполняется по фамилии и первому имени, как указано в конечной точке контроллера:

public ResponseEntity<PagedResources<UserResource>> all(@PageableDefault(sort = { "lastname", "firstname" }, direction = Sort.Direction.ASC) Pageable pageable, Sort sort,
        PagedResourcesAssembler<User> pagedResourcesAssembler, UriComponentsBuilder builder) {

Таким образом, HTTP-ответ, являющийся HATEOAS, выглядит следующим образом:

{
  "_embedded" : {
    "userResourceList" : [
    ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/api/users?page=0&size=5&sort=firstname,asc"
    }
  },
  "page" : {
    "size" : 5,
    "totalElements" : 5,
    "totalPages" : 1,
    "number" : 0
  }
}

, а заголовок Location также:

Location: http://localhost:8080/api/users?page=0&size=5&sort=lastname&sort=firstname&lastname.dir=ASC&firstname.dir=ASC

Теперь на передней панелиend Angular клиентское приложение, я хотел бы передать этот порядок сортировки обратно в некоторые свойства страницы, например:

getUsers(searchTerm: string, sortFieldName: string, sortDirection: string, currentPageNumber: number): Observable<UsersApi> {
  return this.userService.getSome(searchTerm, sortFieldName, sortDirection, currentPageNumber, this.elementsPerPage)
    .pipe(
      map(response => {
        console.log(response.page.sortFieldName); // TODO How to have this one fed ?
        return new UsersApi(
          response._embedded.userResourceList as User[],
          response.page.number,
          response.page.size,
          response.page.totalElements,
          response.page.totalPages,
          response.page.sortFieldName,
          response.page.sortDirection
        );
      })
    );
}

Но, конечно, такого свойства response.page.sortFieldName не существует.

Как я должен получить этот фактический порядок сортировки?Должен ли я добавить его в ответ или попытаться разобрать заголовок Location?Или значение self url из ответа?

...