问题标签 [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 - 在 Spring 中实现 HATEOAS 时出错
我正在尝试使用 Spring MVC 实现 REstful Web 服务。我第一次这样做时没有使用 HATEOAS 概念。我正在返回域对象,它工作正常。现在我正在尝试在控制器中为相同的方法实现 HATEOAS 并且它给出了错误。有人可以帮我吗?
我的域类如下:
我的控制器类是
错误1如下
错误2如下
正如我们所看到的,当我添加硬编码链接时它可以工作,但是当我尝试获取时出现错误。有人可以告诉我我做错了什么吗?感谢您的时间。
spring - 从@PathVariable DomainObject 转换为字符串?(使用 ControllerLinkBuilder.methodOn)
我试图ControllerLinkBuilder.methodOn()
用非字符串类型调用 Spring,但总是失败。而且我不知道Converter
使用哪种以及在哪里注册。
这是我的控制器:
System.out.println(c)
效果很好。我的Company
域对象从数据库中获取。(我正在使用DomainClassConverter
)
但另一种方式不起作用:ConverterNotFoundException: No converter found capable of converting from type @PathVariable Company to type String
我只需要一个Converter<Company, String>
吗?我应该在哪里注册?addFormatters(FormatterRegistry registry)
我在 的方法中尝试了一些东西WebMvcConfigurationSupport
,但它确实显示了相同的错误。但毕竟我不确定我到底尝试了什么......
rest - Spring Data Rest HATEOAS 配置子URI
我配置了 Spring Hateoas 的 Spring Data Rest,特别是 Spring-Data-Mongo。奇迹般有效。
问题是,实体位于 URI 的根目录。例如,对于实体 Person,并假设我的 servlet 上下文是 abc,它将是http://localhost:8080/abc/person
我想有一个“子URI”来处理这些实体。例如,http://localhost:8080/abc/rest/person
或http://localhost:8080/abc/api/person
我查看了文档、手册、教程,并搜索了互联网。我似乎找不到解决方案。
有人知道该怎么做吗?
此外,还有几个场景: 1. 一个实体是否可以有多个 URI?例如,.../person 和 .../people 指向同一个实体。2. 如果我想对一个实体使用相同的 URI,对于一个客户端可以访问某些方法,而另一个客户端具有不同的访问权限,最佳实践是什么?例如,一个客户端只能读取,而另一个客户端可以读/写。
最后,是否有一个使用 API 密钥实现 Spring Security 的库?
提前致谢,
json - Spring Data Rest 模糊关联异常
由于我的域类中的关联不明确,新添加LinkCollectingAssociationHandler
的内容会抛出一个。MappingException
链接数组如下所示:
[<http://localhost:8080/rooms/2/roomGroups>;rel="roomGroups", <http://localhost:8080/rooms/2/userGroup>;rel="userGroup", <http://localhost:8080/rooms/2/room>;rel="room", <http://localhost:8080/rooms/2/originatingConferences>;rel="originatingConferences", <http://localhost:8080/rooms/2/user>;rel="user"]
当它抛出异常时,它正试图添加另一个“房间”关系。
问题是它似乎正在添加指向我已明确标记的关系的链接@RestResource(exported = false)
这是我认为导致此问题的关系示例:
该类型有一个由 a和 aRoomsByUserAccessView
组成的嵌入 id 。Room
User
我还注释了嵌入的 id 属性:
及其属性如下:
在序列化为 JSON 时,如何让它正确地忽略这些关系?
我的代码在 DATAREST-262 之前工作(https://github.com/spring-projects/spring-data-rest/commit/1d53e84cae3d09b09c4b5a9a4caf438701527550)
当我尝试访问 rooms/ 端点时返回的完整错误消息如下:
{
timestamp: "2014-03-17T13:38:05.481-0500"
error: "Internal Server Error"
status: 500
exception: "org.springframework.http.converter.HttpMessageNotWritableException"
message: "Could not write JSON: Detected multiple association links with same relation type! Disambiguate association @com.fasterxml.jackson.annotation.JsonIgnore(value=true) @javax.persistence.ManyToOne(fetch=EAGER, cascade=[], optional=true, targetEntity=void) @org.springframework.data.rest.core.annotation.RestResource(description=@org.springframework.data.rest.core.annotation.Description(value=), path=, exported=false, rel=) private com.renovo.schedulerapi.domain.Room com.renovo.schedulerapi.domain.RoomsByUserAccessViewId.room using @RestResource! (through reference chain: org.springframework.hateoas.PagedResources["content"]->java.util.UnmodifiableCollection[0]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Detected multiple association links with same relation type! Disambiguate association @com.fasterxml.jackson.annotation.JsonIgnore(value=true) @javax.persistence.ManyToOne(fetch=EAGER, cascade=[], optional=true, targetEntity=void) @org.springframework.data.rest.core.annotation.RestResource(description=@org.springframework.data.rest.core.annotation.Description(value=), path=, exported=false, rel=) private com.renovo.schedulerapi.domain.Room com.renovo.schedulerapi.domain.RoomsByUserAccessViewId.room using @RestResource! (through reference chain: org.springframework.hateoas.PagedResources["content"]->java.util.UnmodifiableCollection[0])"
}
jackson - 在 Spring Data Rest 中使用自定义 json 序列化程序时的不同 JSON 输出
Jackson
根据官方文档添加自定义序列化程序后,我观察到 json 输出格式略有不同。
此示例基于spring-restbucks。
扩展org.springsource.restbucks.WebConfiguration
并RepositoryRestMvcConfiguration
覆盖configureJacksonObjectMapper
:
创建类org.springsource.restbucks.order.OrderSerializer
。为简洁起见,只需将属性写paid
为 JSON。
在添加 OrderSerializer json 响应之前,http://localhost:8080/orders/1
如下所示:
添加 OrderSerializer json 响应后http://localhost:8080/orders/1
看起来像
主要问题是属性paid 被包装到另一个对象内容中,该对象内容是org.springframework.hateoas.Resource的一个属性。我期望没有此属性的响应:
我查看了 Jackson 代码,发现UnwrappingBeanSerializer可能是我正在寻找的解决方案。在查看了如何初始化 UnwrappingBeanSerializer 之后,我认为这个序列化器不应该被子类化以供自定义使用。
我想知道使用自定义序列化程序时这种偏离的 json 格式是正常行为还是 Spring Data Rest 中的错误。任何形式的帮助表示赞赏。
java - 如何使用 Spring HATEOAS 添加查询字符串参数?
我正在尝试生成指向搜索资源的链接。所以,我想创建一个资源来提供我的搜索链接:
响应应该是:
这是我的代码:
问题是我不知道如何将查询字符串参数添加到该行中的 url:
因为该行的结果是:
有任何想法吗?
spring - 何时使用 @RestController 与 @RepositoryRestResource
我一直在研究如何将 Spring 与REST结合使用的各种示例。我们的最终目标是 SpringHATEOAS/HAL
设置
我已经看到了在Spring中呈现REST的两种不同方法
通过
@RestController
控制器内通过
@RepositoryRestResource
存储库中
我正在努力寻找的是你为什么要使用一个而不是另一个。当试图实施HAL
哪个是最好的?
我们的数据库后端是Neo4j。
spring-data-neo4j - 非关系属性未在 Spring Data Rest Neo4j 输出中的引用实体上公开
我正在编写一些代码,这些代码使用 spring-data-neo4j (SDN) 和 spring-data-rest-mvc 来存储和访问具有循环特征的图形数据。我正在使用 spring-data-rest-mvc 来访问 HATEOAS 功能,以允许客户端通过链接来导航图表。
作为一个简单的例子,我从http://spring.io/guides/gs/accessing-neo4j-data-rest/获取了 gs-accessing-neo4j-data-rest 代码,并用一种增强了 Person 类社交方面,即“朋友”为:
即 Person 实例之间的双向关系。
我加载了一组样本数据,并在它们之间建立了随机的朋友关系。到目前为止一切都很好。
如果我打
我得到了预期:
如果我打
但是,我得到
其中包含 firstName 和 lastName 的空值。
直接打其中一个朋友,例如
我得到:
我明白为什么我得到空值 - 朋友集上没有 @Fetch,所以实际上并没有获取朋友 - 只有节点 ID 是已知的,用于构建自我和朋友的 href。但是使用空值产生的输出是错误的——这是对数据的错误表述。
我不能在朋友集中包含@Fetch,因为这会使应用程序进入旋转并溢出堆栈,所以这就是我被卡住的地方。我想查看列出好友时显示的好友的非关系属性,即我想查看:
有谁知道我怎么能做到这一点?
提前谢谢了。
hateoas - 如何使用 Spring-hateoas 使用“templated:true”构建 HAL 链接?
我试图弄清楚如何使用templated: true
. 如果我使用
和字符仍然被编码{
。知道如何通过其 API}
使用 Spring-hateo 构建模板 URL 链接吗?0.10.0.RELEASE
谢谢。
spring - 如何以最解耦的方式使用 Spring Hateoas
基本上我想生成一个 ReSTful 服务,就像我可以使用 Spring-Data RestRepositories 一样,但是除了使用两个非常不同的数据源之外,我还需要向我的服务添加大量的域逻辑。这是一个 POC。我发现的所有教程都参考了在创建资源时在控制器中构建链接或使用资源组装器并指向方法。我发现很少有使用实体链接的例子,这似乎是一种更“解耦”的方式。此外,如果不编写我自己的控制器并且只是吐出一个资源支持实例(这很好,但我认为有更好的方法),我没有明确的方法可以在上下文根中生成登录页面。我知道这是一个新项目,
我的要求基本上是这样的:
- 在上下文根目录中有登录页面,暴露了我所有的 REL
- 将我的资源与框架的 ResourceSupport 分离
- 将链接的创建与控制器本身分离
- 应用集合模式和单例模式,以便 HAL 浏览器正确显示链接
我确信在某些人的脑海中存在一些最佳实践,也许是 Oliver 的,我想捕捉这些最佳实践,这样我就可以正确地构建我的 POC。