Как использовать DiscoveredResource для перехода к одному ресурсу сущности, предоставляемому RepositoryRestResource - PullRequest
0 голосов
/ 21 декабря 2018

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

В 1 приложении у меня естьRepositoryRestResource выставляет некоторый объект:

@RestRepositoryResource(collectionResourceRel="things", itemResourceRel="thing") public interface ThingRepo extends CrudRepository<Thing,Long> {}

В каком-то другом приложении я хотел бы перейти к одной вещи.У меня есть идентификатор (скажем, 1) и имя отношения коллекции и отдельного ресурса.

Я хотел бы использовать DiscoveredResource, чтобы получить ссылку на этот ресурс отдельного элемента или на коллекцию.ресурс, который я затем могу каким-то образом расширить, используя идентификатор (который потребует шаблонного ресурса).Если это вообще возможно, я не хотел бы просто добавлять «/ 1» в конце URL-адреса.

так я в настоящее время создаю DiscoveredResource, чтобы указывать на ресурс коллекции:

new DiscoveredResource(new DynamicServiceInstanceProvider(discoveryClient, traverson -> traverson.follow("things"));

Должен ли я добавить шаблонную ссылку на ресурс коллекции, созданный @RepositoryRestResource.Или я пропускаю какой-то другой трюк?

1 Ответ

0 голосов
/ 03 февраля 2019

Решением здесь является добавление пользовательского метода в виде @RestResource, который предоставляет связь с URL-адресом шаблона, по которому вы затем можете следовать.

Репо:

@RestRepositoryResource(collectionResourceRel="things", itemResourceRel="thing") public interface ThingRepo extends CrudRepository<Thing,Long> {

    @RestResource(rel = "thing")
    Thing findOneById(@Param("id") Long id);
}

Discovery +traverson:

DiscoveredResource resource = new DiscoveredResource(new DynamicServiceInstanceProvider(discoveryClient, traverson -> traverson.follow("things","search","thing"));
Link link = resource.getLink().expand(id);
...