Как отфильтровать доступный только для чтения ресурс Hateoas в Spring? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть довольно сложная группа сервисов, которые соответствуют HATEOAS-части приложения REST. Весь фронт строго написан на Angular, так что, похоже, он работает для того, для чего он был разработан.

Хотя у меня есть защита на стороне сервера, чтобы быть уверенным, что неправильный пользователь не отредактирует неверную информацию, когда пользователь попадает на страницу ADMIN, он может видеть всю информацию, в том числе и ту, которую он может 'т изменить.

Таким образом, выполнение get / infromation позволяет получить все данные, как ожидалось, и определено в Spring RepositoryRestResource, поэтому я добавил метод findAllByRegion в интерфейс, и теперь я могу получить ответ от / findAllByRegion? Region =52485

@RepositoryRestResource(collectionResourceRel = "information", itemResourceRel = "information", path = "information")
public interface InformationRepositoryRestResource extends JpaRepository<Information, Integer> {

    Information findByAlias(String alias);  

    Information findOneById(int id);

    List<Information> findAllByRegion(Integer region);
}

Хорошо, я ожидал, что Spring создаст идентичную точку, но будет фильтровать данные по регионам.

В структуре ответа JSON отсутствуют некоторые поля, которые нарушают работу моего внешнего интерфейса.

Разница между / information / findAll и / information / findAllByRegion заключается в куче дополнительных полей в объекте _links:

"_links" : {
    "first" : {
      "href" : "http://localhost:8080/information?page=0&size=20"
    },
    "self" : {
      "href" : "http://localhost:8080/information{?page,size,sort}",
      "templated" : true
    },
    "next" : {
      "href" : "http://localhost:8080/information?page=1&size=20"
    },
    "last" : {
      "href" : "http://localhost:8080/information?page=9&size=20"
    },
    "profile" : {
      "href" : "http://localhost:8080/profile/information"
    },
    "search" : {
      "href" : "http://localhost:8080/information/search"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 200,
    "totalPages" : 10,
    "number" : 0
  }

Я не настолько знаком с Spring, но яожидал, что это создаст точку обслуживания, идентичную той, которую я могу найти в / информация.

Как я должен фильтровать данные в этом сценарии?

Почему Spring дает мне больше данных на одном конце и меньше на другом?

РЕДАКТИРОВАТЬ:

Нашел половину моего ответа: https://www.baeldung.com/spring-data-jpa-pagination-sorting

Кажется, что возврата страницы <> достаточно, чтобы добавить нумерацию страниц, необходимую для работы внешнего интерфейса.

Почему это было включено по умолчанию в другом случае?

...