【发布时间】:2020-11-17 18:10:34
【问题描述】:
我们正在尝试为使用 Spring Data 创建的 API 创建 Java 客户端。
一些端点返回包含 _embedded 和 _links 属性的 hal+json 响应。
我们目前的主要问题是试图将我们的头脑围绕以下结构:
{
"_embedded": {
"plans": [
{
...
}
]
},
...
}
当您点击计划端点时,您会得到一个分页响应,其内容在 _embedded 对象中。因此,逻辑是您调用计划并返回包含 _embedded 对象的响应,该对象包含包含计划对象数组的计划属性。
_embedded 对象的内容也可以变化,尝试使用泛型的解决方案(如下例所示)最终返回给我们一个 LinkedHashMap 对象列表,而不是预期的类型。
class PaginatedResponse<T> {
@JsonProperty("_embedded")
Embedded<T> embedded;
....
}
class Embedded<T> {
@JsonAlias({"plans", "projects"})
List<T> content; // This instead of type T ends up deserialising as a List of LinkedHashMap objects
....
}
我不确定上述问题是否与此Jackson bug report dating from 2015 有关。
到目前为止,我们唯一的解决方案是为每种类型的内容创建分页响应,具有明确定义的类型,或者为我们期望接收的每种类型的对象包含一个 List
所以我们对这个相当广泛的问题的主要问题是,应该如何在不使用 Spring 的情况下导航这样的 API?
我们不认为以任何形式使用 Spring 作为可接受的解决方案。同时,我在这里可能错了,但看起来在 java 世界中,Spring 是唯一积极支持/促进 HAL/HATEOAS 的框架?
很抱歉,如果在这个问题中存在错误表达的概念、假设和术语,但我们正试图围绕这种实现的理念以及如何从 Java 的角度处理它。
【问题讨论】:
标签: java jackson spring-hateoas hateoas