【问题标题】:Using HAL-browser with spring-hateoas WITHOUT spring-data-rest在没有 spring-data-rest 的情况下使用带有 spring-hateoas 的 HAL 浏览器
【发布时间】:2017-03-14 14:42:55
【问题描述】:

我们正在启动一个新项目,并且正在研究使用 spring-hateoas / 超媒体。 HAL 浏览器看起来也很有趣,所以我们想看看。

但是,HAL 浏览器似乎与 spring-data-rest 捆绑在一起,我们不想使用它(出于不同的原因)。

至少我们不想将所有存储库自动公开为剩余资源,但是这样做时,除了定义链接之外,我们还需要明确定义 HAL 浏览器的链接 春天讨厌。

当不自动公开存储库时,我们必须定义

implements ResourceProcessor<RepositoryLinksResource>

@Override
    RepositoryLinksResource process(RepositoryLinksResource resource) {
        resource.add(link('/{id}').withRel('my-dummy'))

        return resource
    }

除了已经定义的链接(使用hateoas)

link('/{id}').expand(entity.id).withSelfRel()

这看起来很麻烦,而且不符合 DRY 原则。 我们宁愿不实现 @Override 方法 RepositoryLinksResource 进程(RepositoryLinksResource 资源),因为这些链接已经在别处定义了。

我最初的想法是 HAL 浏览器会重用已经用 hatoas 定义的链接。 但是我没有正确理解它?

所以问题是

有没有办法不使用spring-data-rest而使用spring-bundled HAL浏览器?

并且在不自动公开存储库时无需为 HAL 浏览器显式手动定义链接?

【问题讨论】:

  • “有没有办法不使用spring-data-rest而使用spring-bundled HAL浏览器” 是的。不是从春天来的。 Spring Data Rest 仅包含它。但我认为你误解了它的目的。顾名思义,它允许您浏览,而不是提供链接。
  • 我明白了(可能原始描述不清楚)。问题是为什么 spring-data-rest 没有重用已经定义的链接,并迫使我覆盖 process 方法。
  • 您能否详细说明“重新使用已经用 hatoas 定义的链接”?我也不明白您所说的_“将资源(控制器)暴露给 HAL 浏览器” 是什么意思。您不会仅为 HAL 浏览器创建链接。
  • 第一件事。 1)我有资源。该资源具有链接(使用 spring-hateoas 类创建)。到目前为止,一切都很好。但是,与 spring-data-rest 捆绑的 HAL 浏览器不会接收这些链接。我认为 spring-data-rest 捆绑的 hal 浏览器会使用这些链接。它没有。
  • 2) 我可以删除这条评论,这是一位开发者的初步评论,我可以看到混乱

标签: spring-data-rest spring-hateoas hal-json


【解决方案1】:

没有spring-data-rest就不能使用Spring提供的HAL浏览器。

我也有类似的需求,并考虑了以下选项...

  1. 将 Spring HAL 浏览器打包到一个单独的项目中(托管在不同的端口上),并使用 @CrossOrigin 标记您的原始项目。
  2. 打包通用 HAL 浏览器。

我没有尝试第一种方法,所以不知道您是否会遇到任何其他问题。

第二种方法是通过下载 HAL 浏览器 (https://github.com/mikekelly/hal-browser) 并将其添加到 Spring Boot 项目文件夹 src/resources/public (https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot) 来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多