问题标签 [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 回答
1714 浏览

spring - 如何向客户端显示资源 ID?

org.springframework.hateoas.ResourceSupport已经包含一个getId方法。

如果我的资源(或更好的域对象)包含一个需要呈现给客户端的整数 id,我无法添加一个简单的id并添加getId/ setId(因为ResourceSupport已经有它)。

我应该返回一些东西<myResourceObjectName>_id还是让客户解释提供的 id 链接/URL 更好ResourceSupport

0 投票
0 回答
68 浏览

hateoas - 什么是返回报告数据的好 HATEOAS 建议?

Spring HATEOAS - 以及一般的 HATEOAS - 始终与资源和对它们执行操作有关。

就像发票资源一样,可以创建(发布)、更新(放置)、检索(获取)和删除。

我想知道返回报告数据的最佳实践是什么。就像基于发票的每日、每月、每年的收入报告。

收入或收入报告资源有意义吗?只需获取返回所需的数据?

有什么建议吗?

0 投票
1 回答
397 浏览

java - @EnableHypermediaSupport 的 XML 配置等效项

我正在阅读一篇关于使用 Spring-HATEOAS 开发 REST API的文章,以及浏览项目页面和文档,但到目前为止只看到了使用 Java 配置的示例代码。是否有@EnableHypermediaSupport与文章示例中看到的配置等效的 XML 和配置?

0 投票
1 回答
8485 浏览

java - 如何使用 Spring HATEOAS 放置和发布链接

我试图了解如何在 Spring HATEOAS 中创建和修改链接。

例如,假设我有两个集合,一个在 api/users,另一个在 api/event。我想将用户 api/user/56 与事件 api/event/21 相关联。出于争论的原因,这是多对多的——一个用户可能参加很多活动,一个活动可能有很多用户。

据我了解,这样做的宁静方式是使用 URI 作为主键,所以我可能会将以下内容发布到 api/user/56/events;

然后端点需要能够解析该 URL 并提取 ID(在本例中为 21)和控制器(EventController.class),以便我可以保留它。

问题 1:就 REST API 而言,这是在 Spring Hateoas 中处理关系的正确方法吗?

问题 2:如何在控制器中将此 url 解析为可用的数据句柄(例如对适当控制器/方法的引用、主键等)

研究

RestTemplate 可用于从请求映射方法中的控制器请求数据,如下所示;

但是我不认为 eventResource 应该返回一个 Id 字段作为数据的一部分——它不是很安静,这会暴露在 API 上。一种方法是使用参数“includePK=true”,但这又感觉不对——它只是隐藏了问题。此外,服务器以这种方式向自己的 API 发出请求的想法似乎很迂回。

更新

这里有一个未解决的问题https://github.com/spring-projects/spring-hateoas/issues/292。基于该问题的一些评论(由用户kevinconaway 提供),我制作了一个快速 util 类,在这里提供了一个简单的解决方案:SpringHateoasUtils。解决方案归结为;

SpringHateoasUtils使它稍微好一点,但它仍然感觉应该是一个特性。我将寻求在 spring 代码中为此获取一些东西 - 当它清楚发生了什么时,我将回答这个问题。

0 投票
1 回答
2554 浏览

spring-data-rest - 如何在 Spring Data REST 中向根资源添加附加链接?

spring-data-rest 模块自动扫描应用程序中的所有存储库并将它们列出如下:

但是,我有一些不受数据库支持且没有存储库类的资源。

如何将具有自己的控制器类的简单资源添加到上面的列表中。现在该列表并未反映我的应用程序的整个 REST api。

0 投票
2 回答
832 浏览

spring - 实现/覆盖 MongoRepository 保持 HATEOAS 格式

我有一个简单的 MongoRepository,我想修改它以在 post(save()) 上返回生成的 ObjectId。

我已经探索了生成 id 客户端并在帖子中传递它的方法,但我真的希望 Spring 来处理这个问题。

我尝试使用控制器进行拦截并在 ResponseBody 中返回对象,如下所示:

问题在于它迫使我为我重新处理所有与 HATEOAS 相关的逻辑 Spring 句柄。这是一个主要的痛苦。(除非我遗漏了什么。)

无需替换所有方法的最有效方法是什么?

0 投票
3 回答
8188 浏览

spring - 我可以让自定义控制器镜像 Spring-Data-Rest / Spring-Hateoas 生成的类的格式吗?

我正在尝试做一些我认为应该非常简单的事情。我有一个Question对象,使用 spring-boot、spring-data-rest 和 spring-hateoas 设置。所有的基础工作都很好。我想添加一个自定义控制器,它以与 GET 到 my的urlList<Question>完全相同的格式返回 a ,以便两者之间的响应兼容。Repository/questions

这是我的控制器:

选项 1:依靠提供的SimplePagedResourceAssembler

此选项的问题是没有_links呈现任何必要的内容。如果对此有解决方案,那将是最简单的解决方案。

选项 2:实现我的开放资源汇编器

这个选项的问题在于,QuestionResourceAssembler根据Spring-Hateoas 文档实现会导致一条路径QuestionResource接近于 的重复Question,然后汇编器需要在两个对象之间手动复制数据,我需要构建所有相关_links的手工。这似乎浪费了很多精力。

该怎么办?

我知道 Spring 在导出QuestionRepository. 有什么方法可以利用该代码并使用它,以确保我的控制器的输出是无缝的并且可以与生成的响应互换?

0 投票
1 回答
1498 浏览

spring - 通过 RestTemplate 用 HAL+JSON CURIE 交换 Spring 超媒体资源

我正在使用 Spring Framework 4.1.0 和 Spring HATEOAS 0.16.0 为该应用程序开发 Spring Web 应用程序和 Spring 测试客户端。

测试客户端有如下语句:

...其中Calculation是带有 Jackson 注释的 POJO(例如,@JsonProperty)。

如果没有 CURIE,则该RestTemplate.exchange()调用会成功:response.getBody().getLinks()返回 的非空非空实例List<Link>

我的 Web 应用程序具有非标准链接关系,例如“子计算”。我想使用 CURIE。

使用 CURIE,该RestTemplate.exchange()调用失败:响应反序列化代码抛出org.springframework.http.converter.HttpMessageNotReadableException,原因是com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:'无法读取 JSON:无法识别的字段“名称”(类 org.springframework.hateoas.Link),未标记为可忽略(一个已知属性“href” ])'

_links特别是,Jackson 无法将响应 JSON 中的映射中的 CURIE(s) 反序列化到List<Link>-typed field org.springframework.hateoas.ResourceSupport.links。响应 JSON 如下所示:

我如何使用RestTemplate.exchange()获取HAL+JSON(“application/hal+json”)表示使用 CURIE 的资源?

0 投票
1 回答
2909 浏览

jersey - 有没有办法将 JAX-RS 资源链接到 Spring HATEOAS 中的另一个资源?

在 Spring 中,我们有@ExposesResourceFor注释可以将我们的资源与其他资源链接起来。多亏了这一点,我们的 Value 对象(表示)对实际资源一无所知。

有没有办法在 JAX-RS 中做到这一点?我将 Dropwizard 与 Jersey 和 Jackson 一起使用,我看到的只是@InjectLinks注释,我可以在这样的值对象中使用它:

但不幸的是,我的值对象应该对资源一无所知,所以我问我是否可以在资源级别上进行这种链接 - 如上所述,控制器中的 spring-hateoas 中的链接。

0 投票
5 回答
9523 浏览

spring - How to disable RepositoryRestHandlerMapping and EndpointHandlerMapping?

I am currently building an application with a REST interface, using Spring Boot, Hibernate and Spring-HATEOAS. My data model is defined as beans with @Entity annotation and I am using Spring's feature to automatically set up a Hibernate repository (Creating an interface extending PagingAndSortingRepository). My application is completely annotation-driven, i.e., I have no web.xml but configure everything with the Spring annotations like @Configuration, @Bean etc., and start the application from my main method with the help of SpringApplication.run(MyApp.class, args);

This works fine, but with this approach, a RepositoryRestHandlerMapping and EndpointHandlerMapping is created. These create a bunch of resources I neither need nor want. I implement my own controllers because they need to do more than the standard logic.

How can I prevent this default behaviour and disable these mappings?