问题标签 [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.
spring - 如何向客户端显示资源 ID?
org.springframework.hateoas.ResourceSupport
已经包含一个getId
方法。
如果我的资源(或更好的域对象)包含一个需要呈现给客户端的整数 id,我无法添加一个简单的id
并添加getId
/ setId
(因为ResourceSupport
已经有它)。
我应该返回一些东西<myResourceObjectName>_id
还是让客户解释提供的 id 链接/URL 更好ResourceSupport
?
hateoas - 什么是返回报告数据的好 HATEOAS 建议?
Spring HATEOAS - 以及一般的 HATEOAS - 始终与资源和对它们执行操作有关。
就像发票资源一样,可以创建(发布)、更新(放置)、检索(获取)和删除。
我想知道返回报告数据的最佳实践是什么。就像基于发票的每日、每月、每年的收入报告。
收入或收入报告资源有意义吗?只需获取返回所需的数据?
有什么建议吗?
java - @EnableHypermediaSupport 的 XML 配置等效项
我正在阅读一篇关于使用 Spring-HATEOAS 开发 REST API的文章,以及浏览项目页面和文档,但到目前为止只看到了使用 Java 配置的示例代码。是否有@EnableHypermediaSupport
与文章示例中看到的配置等效的 XML 和配置?
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 代码中为此获取一些东西 - 当它清楚发生了什么时,我将回答这个问题。
spring-data-rest - 如何在 Spring Data REST 中向根资源添加附加链接?
spring-data-rest 模块自动扫描应用程序中的所有存储库并将它们列出如下:
但是,我有一些不受数据库支持且没有存储库类的资源。
如何将具有自己的控制器类的简单资源添加到上面的列表中。现在该列表并未反映我的应用程序的整个 REST api。
spring - 实现/覆盖 MongoRepository 保持 HATEOAS 格式
我有一个简单的 MongoRepository,我想修改它以在 post(save()) 上返回生成的 ObjectId。
我已经探索了生成 id 客户端并在帖子中传递它的方法,但我真的希望 Spring 来处理这个问题。
我尝试使用控制器进行拦截并在 ResponseBody 中返回对象,如下所示:
问题在于它迫使我为我重新处理所有与 HATEOAS 相关的逻辑 Spring 句柄。这是一个主要的痛苦。(除非我遗漏了什么。)
无需替换所有方法的最有效方法是什么?
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
. 有什么方法可以利用该代码并使用它,以确保我的控制器的输出是无缝的并且可以与生成的响应互换?
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 的资源?
jersey - 有没有办法将 JAX-RS 资源链接到 Spring HATEOAS 中的另一个资源?
在 Spring 中,我们有@ExposesResourceFor
注释可以将我们的资源与其他资源链接起来。多亏了这一点,我们的 Value 对象(表示)对实际资源一无所知。
有没有办法在 JAX-RS 中做到这一点?我将 Dropwizard 与 Jersey 和 Jackson 一起使用,我看到的只是@InjectLinks
注释,我可以在这样的值对象中使用它:
但不幸的是,我的值对象应该对资源一无所知,所以我问我是否可以在资源级别上进行这种链接 - 如上所述,控制器中的 spring-hateoas 中的链接。
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?