使用HAL浏览器与spring-hateoas没有spring-data-rest

时间:2016-11-01 12:50:34

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

我们正在开始一个新项目,我们正在研究使用spring-hateoas / hypermedia。 HAL浏览器看起来也很有趣,所以我们想查看它。

然而,HAL浏览器似乎捆绑到spring-data-rest,我们不想使用它(出于不同的原因)。

至少我们不想将所有存储库自动公开为rest-resources,但是在执行此操作时,我们需要明确定义HAL浏览器的链接以及定义链接 弹簧HATEOAS。

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

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浏览器会重新使用已经用hateoas定义的链接。 但是我觉得我没理解它?

所以问题是

有没有办法在不使用spring-data-rest的情况下使用弹簧捆绑的HAL浏览器?

在不自动公开存储库的情况下,无需为HAL浏览器明确手动定义链接?

1 个答案:

答案 0 :(得分:2)

Spring提供的HAL浏览器不能在没有spring-data-rest的情况下使用。

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

  1. 将Spring HAL浏览器打包到一个单独的项目中(托管在不同的端口上),并用@CrossOrigin标记原始项目。
  2. 打包通用HAL浏览器。
  3. 我没有尝试第一种方法,所以不知道你是否会遇到任何其他问题。

    第二种方法是通过下载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)来完成的。