我正在为购物清单开发一个Spring Boot应用程序。 为此,我使用Spring Data Rest通过REST API导出我的实体。
My Architecture看起来像这样
我有一个 ShoppingItem :
public class ShoppingItem {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "articleId", nullable = false)
private Article article;
private Integer number;
private boolean bought;
public ShoppingItem(){
this.article = null;
this.number = 0;
this.bought = false;
}
}
此购物项目包含作为导出资源的文章。
文章如下所示:
public class Article {
@Id
@GeneratedValue
private Long id;
@Column(unique = true)
private String name;
private Integer price;
}
当我请求ShoppingItem时,答案如下:
{
id: 94,
number: 1,
bought: false,
_links: {
self: {
href: "https://myDomain.tld/api/shoppingItems/94"
},
article: {
href: "https://myDomain.tld/api/shoppingItems/94/article"
}
}
}
请求Article
时是否可以在_embedded中包含ShoppingItem
,以便响应如下所示?
{
id: 94,
number: 1,
bought: false,
_links: {
self: {
href: "https://myDomain.tld/api/shoppingItems/94"
},
article: {
href: "https://myDomain.tld/api/shoppingItems/94/article"
}
},
_embedded: {
article: {
id: '999',
name: 'someThing',
price: '1.99'
}
}
}
更新1
使用Accept: application/x-spring-data-verbose+json
响应如下:
{
id: 94
number: 1
bought: false
links: [2]
0: {
rel: "self"
href: "https://wg.yannic-klem.de/api/shoppingItems/94"
}-
1: {
rel: "article"
href: "https://wg.yannic-klem.de/api/shoppingItems/94/article"
}-
-
content: [0]
}
内容列表始终为空:(
更新2:
有关我的架构的更多信息,请随时查看我的Github仓库:https://github.com/Yannic92/ShoppingList/tree/master/src/main/java/de/klem/shopping
答案 0 :(得分:1)
答案 1 :(得分:0)
定义文章的摘录投影并使用配置到其存储库中
excerptProjection
任何已定义摘录投影的资源都将添加到响应的_embedded
部分。这适用于协会的集体资源。
在https://stackoverflow.com/a/30297320/1203628或Spring Data REST reference documentation
了解详情只要在_embedded子句中使用目标类型的实例(在您的情况下为Article),就会使用摘录投影。因此,摘录是在资源本身未呈现但指向的任何地方使用的某种预览。这通常来自收集资源或关联。 在Spring Data REST参考文档中阅读有关此主题的更多信息。