我有一个Spring Data Rest项目,它有一些关系,但我发现HATEOAS链接是不同的,这取决于是否直接调用投影而不是通过另一个投影引用。
我正在这样做,以便我可以加载骨架结构以进行快速初始加载,然后在需要更多详细信息时直接查询实体。例如,如果投影设置为:
,则直接跳过实体@Projection(name="userDetails")
public Interface UserProjection {
String getName();
List<RoomProjection> getRooms();
}
@Projection(name="RoomDetails")
public Interface RoomProjection {
String getName();
List<ComputerProjection> getComputers();
}
@Projection(name="ComputerDetails")
public Interface ComputerProjection {
String getName();
}
查询GET /users?projection=userDetails
的回复告诉我们:
{
"_embedded": {
"users": [
{
"name": "User One",
"rooms": [
{
"name": "Room One",
"computers": [
{
"name": "Computer One",
"_links": {
"self": {
"href": "http://localhost:8080/computers/1{?projection}",
"templated": true
}
}
}
],
"_links": {
"self": {
"href": "http://localhost:8080/rooms/1{?projection}",
"templated": true
},
"computers": {
"href": "http://localhost:8080/rooms/1/computers"
}
}
}
],
"_links": {
"self": {
"href": "http://localhost:8080/users/1"
},
"user": {
"href": "http://localhost:8080/users/1{?projection}",
"templated": true
},
"rooms": {
"href": "http://localhost:8080/users/1/rooms"
}
}
}
]
}
}
正如您所看到的,房间和计算机的自我链接获取投影参数并丢失自引用链接,这在用户中不存在。但除非我通过嵌入式投影向下钻取,否则我似乎无法提供轻量级概述。
是否有一种简单的方法可以让自我链接保持一致而不包括投影?