我是 Spring 的新人。
我有三个实体发票、产品线和产品
。
(1) 如果我调用 GET/invoices
那么我想要类似的输出,
{
"invoices": [
{
"id": "101",
"date": "2013-02-14"
},
{
"id": "102",
"date": "2013-02-18"
}
]
}
我已经做到了这一点,我能够做到这一点,但无法在获取请求中包含关系。
(2) 我想 GET 调用类似这样的包含关系的东西。
GET /invoices?include=invoice.lines:embed,invoice_line.product:sideload
我想要像这样的输出
{
"invoices": [
{
"id": "101",
"date": "2013-02-14",
"lines": [
{
"id": "201",
"product_id": "301",
"amount": 100
},
{
"id": "201",
"product_id": "302",
"amount": 100
}
]
},
{
"id": "102",
"date": "2013-02-18",
"lines": [
{
"id": "203",
"product_id": "301",
"amount": 100
}
]
}
],
"products": [
{
"id": "301",
"name": "Ice Cream"
},
{
"id": "302",
"name": "Waffles"
}
]
}
我陷入了(2)包含关系,我想实现这样的目标 需要帮忙。 提前致谢。
最佳答案
您可以使用 hibernate 注释来完成此操作。
您的发票实体类应如下所示:
@Entity
@Table(name = "invoices") // your table name
public class Invoice implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "date")
private String date;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "invoices")
private Set<Line> line = new HashSet<Line>(0);
// getter and setter method
您的 Line 实体应如下所示:
@Entity
@Table(name = "lines")
public class Line implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@ManyToOne
@JoinColumn(name = "id", nullable = false) // Invoice id
private Invoice invoice;
// product_id and amount and getter and setter method
并确保您的数据库中有正确的关系。 您可以看看here完整的教程。
希望它能有所帮助,祝您编码愉快。
更新:
发票数据传输对象:
public class InvoiceDTO {
private Integer id;
private String date;
// getter and setter methods
}
然后创建另一个返回 InvoiceDTO 的服务:
Invoice invEntity = em.find(Invoice.class, id);
InvoiceDTO invDTO = new InvoiceDTO();
invDTO.setId(invEntity.getId());
invDTO.setDate(invEntity.Date());
return invDTO;
然后,当您需要时,您可以在关系中返回发票,也可以返回 InvoiceDTO 对象。
关于java - 想要在 Spring REST API 中包含关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33471797/