我收到了这样的hal格式化响应:
{
"name": "Publisher A",
"bookPublishers": [
{
"publishedDate": "2019-07-12T08:19:04.583+0000",
"_links": {
"publisher": {
"href": "http://localhost:8080/api/publishers/1"
},
"book": {
"href": "http://localhost:8080/api/books/2"
}
}
},
{
"publishedDate": "2019-07-12T08:19:04.564+0000",
"_links": {
"publisher": {
"href": "http://localhost:8080/api/publishers/1"
},
"book": {
"href": "http://localhost:8080/api/books/1"
}
}
}
],
"_links": {
"self": {
"href": "http://localhost:8080/api/publishers/1"
},
"publisher": {
"href": "http://localhost:8080/api/publishers/1"
},
"friends": {
"href": "http://localhost:8080/api/publishers/1/friends"
},
"createdBy": {
"href": "http://localhost:8080/api/publishers/1/contact"
}
}
}
我看到了属性 bookPublishers 和链接 friends 。恕我直言,它们应该都是关联链接(请参见2.4. Creating the Associations),在这里我可以“投放”其他资源。
我想使spring render bookPublishers与朋友一样。
示例项目在这里:https://github.com/luvarqpp/poc-springHalRelations
您可以这样做:
git clone https://github.com/luvarqpp/poc-springHalRelations.git cd poc-springHalRelations mvn clean spring-boot:run
PS:奖励问题,最简单的方法是为业务逻辑提供自己的关系,例如关系“ renameAuthor”。
答案 0 :(得分:1)
对于集合关系,当相关类型的存储库存在时,Spring Data将提供一个链接。如果没有存储库,则该集合将内联到响应中,否则,客户端将如何获取数据。
因此,为您的BookPublisher类型创建一个存储库。
您还可以创建一个投影,以便在需要时内联数据。客户端可以在请求中指定此投影,因此可以防止其他服务器调用。
例如
/ publisher / 1?projection = withBookPublishers。