Spring Data Rest - 在_embedded中包含嵌套资源

时间:2015-04-16 09:38:39

标签: java spring rest spring-data-rest nested-resources

我正在为购物清单开发一个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

2 个答案:

答案 0 :(得分:1)

请在发出请求时尝试添加此Accept标头:

Accept: application/x-spring-data-verbose+json

另外,请查看详细解释的this post

答案 1 :(得分:0)

定义文章的摘录投影并使用配置到其存储库中 excerptProjection

任何已定义摘录投影的资源都将添加到响应的_embedded部分。这适用于协会的集体资源。

https://stackoverflow.com/a/30297320/1203628或Spring Data REST reference documentation

了解详情

只要在_embedded子句中使用目标类型的实例(在您的情况下为Article),就会使用摘录投影。因此,摘录是在资源本身未呈现但指向的任何地方使用的某种预览。这通常来自收集资源或关联。 在Spring Data REST参考文档中阅读有关此主题的更多信息。