Отсутствующие аргументы подкачки в сгенерированной собственной ссылке HAL - PullRequest
0 голосов
/ 09 января 2019

Я использую Spring Boot (2.1.1) для автоматического создания HAL REST API моих JpaRepository интерфейсов.

В большинстве случаев эти интерфейсы пусты, например:

public interface LevelRepository extends JpaRepository<Level, Long> {}

Когда я открываю базовый путь REST, для levels создается следующая ссылка:

"levels": {
  "href": "http://localhost:8080/admin/levels{?page,size,sort}",
  "templated": true
} 

Когда я следую http://localhost:8080/admin/levels?size=10, я получаю ожидаемую страницу 0 и ее 10 элементов. Но данная ссылка для себя:

"self": {
  "href": "http://localhost:8080/admin/levels{&sort}",
  "templated": true
}

Я бы ожидал:

  • http://localhost:8080/admin/levels{?page,size,sort} или
  • http://localhost:8080/admin/levels?page=0&size=10{&sort}

Я не уверен, что это ошибка или особенность? Можно ли получить ожидаемое поведение?

Я нашел следующий вопрос по теме: Ошибка при создании собственной ссылки на доступном для ресурсов ресурсе Но данное решение не помогает, так как я уже использую более новую версию.

Дополнительная информация (зачем она мне нужна?)

Такое поведение прерывает поток следующих ссылок на стороне клиента. Если пользователь хочет перейти непосредственно на страницу X или если он хочет изменить размер страницы, исходная ссылка должна быть повторно использована. Небольшой обходной путь, но он не так хорош, как шаблонизация и прямое следование данной ссылке на себя.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

После публикации этого вопроса я обнаружил следующий Spring JIRA ticket , описывающий то же поведение. Согласно комментарию в заявке, ссылка на себя не должна быть шаблонной.

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

0 голосов
/ 09 января 2019

Вы можете заново реализовать ссылку self самостоятельно. Прежде всего, я думаю, что вы используете библиотеку HATEOAS:

<dependency>
    <groupId>org.springframework.hateoas</groupId>
    <artifactId>spring-hateoas</artifactId>
</dependency>

Давайте рассмотрим некоторые из ваших сущностей - ExampleEntity:

public class ExampleEntity extends ResourceSupport {
    private String id;
    private String name;
    private String surname;

    // standard getters and setters
}

Вы расширили класс ResourceSupport, и у него есть свойство link, которое мы могли бы использовать, используя метод add:

ExampleEntity exampleEntity = new ExampleEntity();
Link selfLink = ControllerLinkBuilder.linkTo(YourController.class).slash(id).withSelfRel();
exampleEntity.add(selfLink);

Итак, вы можете изменить поведение своей собственной ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...