如何使用DiscoveredResource遍历到RepositoryRestResource暴露的单个实体资源

How to use DiscoveredResource to traverse to a single entity resource exposed by a RepositoryRestResource

我正在尝试设置一个系统,其中有多个应用程序通过使用发现服务器进行连接。我可以遍历对特定资源的 hal 响应,但我正在寻找从集合资源到单个资源并找到特定实体数据的解决方案。

在 1 个应用程序中,我有一个 RepositoryRestResource 公开了一些对象:

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

在其他一些应用程序中,我想完成一件事。我有 ID(假设它是 1)并且有集合的关系名称和单个资源。

我想使用 DiscoveredResource 为这个单项资源或集合资源获取 link,然后我可以使用 ID 以某种方式扩展它(这需要模板化资源)。 如果可能的话,我不想在 URL.

的末尾添加“/1”

这就是我目前创建 DiscoveredResource 以指向集合资源的方式:

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

我应该并且是否可以在 @RepositoryRestResource 创建的集合资源上添加模板 link。还是我还缺少其他技巧?

此处的解决方案是添加自定义方法作为 @RestResource,它公开与模板的关系 URL,然后您可以遵循。

回购:

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

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

发现 + traverson:

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