这听起来像是一个新手问题,但我想知道用HAL格式呈现分页资源的最佳方法是什么?现在我使用Spring HATEOAS API将Page
对象转换为资源PagedResourcesAssembler#toResource(Page<T>, ResourceAssembler<T,R>)
。这导致以下输出:
{
"_links": {
"self": {
"href": "http://example.org/api/user?page=3"
},
…
}
"count": 3,
"total": 498,
"_embedded": {
"users": [
{
"_links": {
"self": {
"href": "http://example.org/api/user/mwop"
}
},
"id": "mwop",
"name": "Matthew Weier O'Phinney"
}
]
}
}
一切正常但唯一的问题是返回的集合在_embedded
字段下并且有类名,所以客户端必须知道这个类名吗?如果以非HAL格式返回content
下的集合会更好吗?如果是,我应该如何使用Spring HATEOAS实现它?
答案 0 :(得分:2)
这不是问题,这是HAL specification中_embedded
定义的方式。
users
不是一个类,它是一个链接关系,允许客户端首先实际找到它所要求的集合(例如,使用JSONPath表达式)。这根本不是什么东西,但通常是相同的链接关系,客户端用于首先找到该资源。
假设API根公开此文档:
{
"_links": {
"users": {
"href": "…"
},
…
}
}
看到这一点,客户端必须知道users
的语义才能找到它想要遵循的链接。在您的情况下,users
基本上指向支持分页的集合资源。
因此,如果客户端遵循名为users
的链接,则可以通过组合有关媒体类型的知识(HAL)在HAL响应中找到它在_embedded.users
下寻找的实际内容,_embedded
)和服务的应用程序级语义(users
)。