问题标签 [spring-hateoas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6493 浏览

spring - Spring Data REST URI 与实体 ID

Spring Data REST(尤其是 Spring HATEOAS)将 RESTful ID(即 URI)与实体 ID 分离,我在保存新对象时无法将它们链接起来。请参阅https://github.com/SpringSource/spring-data-rest/issues/13上有关此解耦的有趣讨论。

假设客户端应用程序想要创建Ticket具有关联资源的新TicketCategory资源。我想Ticket针对远程 Spring Data REST 端点发布。因为是新的Ticket,所以还没有ID。有TicketCategory一个 ID,但在客户端上它是上面讨论的 URI。因此,当我保存 时Ticket,Spring Data REST 将 传递Ticket给不喜欢它的 Spring Data JPA:Spring Data JPA 认为TicketCategory- 没有实体 ID - 是暂时的:

更新:文档位于

https://github.com/SpringSource/spring-data-rest/wiki/JPA-Repository-REST-Exporter

有一个名为“更新关系”的部分描述了使用 HTTP POST 建立实体之间关系的方案。我不知道这是否是当前唯一可用的方法,但似乎这种方法需要在初始帖子中将关联保留为空,然后使用后续帖子对其进行更新。在上述情况下,这是不可取的,因为工单需要类别字段 ( @NotNull)。

0 投票
2 回答
7521 浏览

spring - 如何避免使用 Spring Data Rest 进行 n+1 查询?

问题。如何避免使用 Spring Data REST 进行 n+1 查询?

背景。在查询 Spring Data REST 以获取资源列表时,每个生成的顶级资源都具有指向关联资源的链接,而不是将关联资源直接嵌入顶级资源中。例如,如果我查询数据中心列表,相关区域会显示为链接,如下所示:

然而,想要获得相关信息而不需要进行 n+1 次查询是非常典型的。为了坚持上面的例子,我可能想在 UI 中显示数据中心及其相关区域的列表。

我试过的。我在 my 上创建了一个自定义查询,RegionRepository以获取给定数据中心键集的所有区域:

不幸的是,此查询生成的链接不会与上述数据中心查询生成的链接重叠。以下是我为自定义查询获得的链接:

挑战似乎在于,一旦您已经了解了数据的形状,数据中心查询返回的链接并不是特别有用。例如,我已经知道数据中心 1 的区域位于/datacenters/1/region,所以如果我想了解涉及哪个特定区域的实际信息,我必须点击链接获取。特别是,我必须按照链接获取显示在批量查询中的规范 URI,这将允许我避免 n+1 查询。

0 投票
3 回答
30647 浏览

java - Spring MVC 3:以 JSON 形式返回 Spring-Data 页面

我有一个用 Spring-Data 制作的数据访问层。我现在正在它之上创建一个 Web 应用程序。这个控制器方法应该返回一个Spring-Data Page格式为 JSON

这样的页面是一个列表,其中包含额外的分页信息,如记录总量等。

这可能吗?如果可以,怎么做?

与此直接相关,我可以定义属性名称的映射吗?例如。这意味着我需要定义如何在 JSON 中命名分页信息属性(不同于在页面中)。这可能吗?如何?

0 投票
1 回答
5225 浏览

json - Spring MVC 3:以 JSON 形式返回 Spring-Data Page - PagedResourcesAssembler 的问题

所以,总的来说,我对 spring 和 java 还很陌生

我尝试做的是在同一个渲染视图上发布数据以过滤表单下显示的结果列表。

我有一个简单的域类如下:

一个 DTO,因为我希望我的域与我的演示文稿分离

扩展 Jpa 和 QueryDsl 的存储库

一个用于我的搜索的数据访问类,它是空安全的(感谢 guava)及其等效的非空安全

人选标准:

空安全版本

我要搜索的谓词

我的服务实现如下:

我使用的映射器只是扩展了一点 DozerMapper:

现在,所有上述工作,很好是单元测试并返回我想要的结果。我的问题是控制器和视图....

我已经仔细阅读了 Oliver 对这个问题的回答:Spring MVC 3: return a Spring-Data Page as JSON

虽然由于某种原因我无法让它工作。我已将以下依赖项添加到我的项目中以使用 HATEOAS 和 Spring-data-commons:

我的控制器看起来像这样:

和我的jsp:

说明: smj 和 smjg 标签是我目前正在研究的标签库,它们将 jquery 链接到 spring mvc。例如:smjg:grid 将创建将调用 jqgrid 函数的标记和 javascript。

与这篇文章Spring MVC 3: return a Spring-Data Page as JSON的 Olivier 回答的第一个区别是,如果我在 HttpEntity 中推断出 PersonDTO,则会收到以下编译错误:

第二个区别是我似乎应该将我的 PersonDTO 推断到 PagedResourcesAssembler 中,对吗?

当我直接调用 url 时的结果 localhost:8081/app/person 我得到一个 http 500 错误:

和根本原因:

我不确定我在这里做错了什么。

如果我用 .json 调用相同的 url,那么我会得到 json 输出,这看起来很奇怪,因为我仍然没有生成 json。

0 投票
1 回答
3375 浏览

caching - Spring Data Rest - 缓存

如何使用 Spring Data Rest 启用缓存?

背后的原因是,一旦应用程序启动,存储库列表和搜索方法就不会改变。此外,如果仅通过 REST API 更改了 REST API 背后的数据,它确实也可以启用缓存数据。

我相信在某种程度上缓存发生在 REST API 框架中,如果缓存发生在最终响应阶段,即 json 响应(以避免将对象编组到 json 的开销),那将是理想的

想法/评论?

0 投票
3 回答
19072 浏览

java - Spring HATEOAS 与 Spring Data Rest

问题是,Spring HATEOAS 与 Spring Data Rest 有什么区别?

我觉得两者都可以做同样的事情,而且 Spring Data Rest(作为 Spring Data 的一部分)似乎更有活力。

https://github.com/spring-projects/spring-hateoas https://github.com/spring-projects/spring-data-rest

您什么时候使用其中一种?

0 投票
2 回答
911 浏览

java - 链接是否应该包含 HateOAS 中的身份验证令牌?

我正在使用 Spring MVC 和 Spring HateOAS 来制作一个安静且无状态的 JSON API。

一切正常。但我有一个“概念”问题。我的 API 在每个请求中都使用身份验证令牌。例如,您使用登录 API 来获取您的身份验证令牌,并且当您调用我的 API 时,您必须像这样使用它:

API 始终响应 JSON,并通过 Spring HateOAS 生成链接。举个例子 :

问题是:我应该在生成的 URL 中添加身份验证令牌吗?(所以它会http://some_host/api/foo/bar/1234656?token=abcd

我找不到任何建议或约定。

0 投票
1 回答
17351 浏览

rest - 为 REST Spring HATEOAS 控制器定义资源组装器

我正在尝试将 HATEOAS 链接添加到 Spring REST 控制器提供的 JSON 资源。

我看到我应该使用https://github.com/spring-projects/spring-hateoas中描述的资源组装器

该示例显示了一个 Person 类和一个 PersonResource 类。

我了解 PersonResource 类定义为:

那么 Person 类是什么?它是一个数据域类吗?

在我的例子中,我定义了一个 Admin 类,它是一个 REST 域类,并将它指定为具有资源支持:

我的 REST 控制器只看到这个 Admin 类,因为它是一个 REST 域类。它不知道也不应该知道任何数据域类。

所以我想知道如何在这里使用资源汇编器支持。

我不明白为什么我应该在这里有一个额外的数据域管理类。

亲切的问候,

跟随迈克的回答是我的控制器现在的样子:

之前,我没有使用资源汇编器,而是在执行以下操作:

但它没有给我 url 中的资源 id。

0 投票
2 回答
2672 浏览

rest - HATEOAS link to method with optional requestparams

I want to link to a method that has the following signature:

Now I want the link to look like this:

I tried using methodOn from Spring HATEOAS's ControllerLinkBuilder as seen below:

But it doesn't lead to the desired link because a ?foo is added at its end. How can I achieve the above objective?

0 投票
2 回答
5741 浏览

spring - 没有扩展 ResourceSupport 的 Spring-HATEOAS

我正在构建一个 REST API。我有一个由无法扩展 ResourceSupport 的 bean 组成的域模型。使用 Spring-HATEOAS 将它们作为资源公开的最佳方法是什么?

如果这是不可能的,那么在 bean 生成的 JSON 上包含链接的最佳方式是什么?