Java 使用Spring HATEOAS嵌套嵌入HAL
我正在寻找如何使用Spring HATEOAS API编程嵌入HAL中的嵌套_的示例。最佳实践是什么 下面是我想要实现的一个示例:Java 使用Spring HATEOAS嵌套嵌入HAL,java,rest,spring-hateoas,hal,hypermedia,Java,Rest,Spring Hateoas,Hal,Hypermedia,我正在寻找如何使用Spring HATEOAS API编程嵌入HAL中的嵌套_的示例。最佳实践是什么 下面是我想要实现的一个示例: { "_links": { "self": { "href": "/invoices" } }, "_embedded": { "invoices": [ { "_links": { "self": { "href"
{
"_links": {
"self": { "href": "/invoices" }
},
"_embedded": {
"invoices": [
{
"_links": {
"self": { "href": "/invoice/1" }
},
"_embedded": {
"items": [
{ "_links": { "self": { "href": "/product/1" }}, "id": 1, "name": "Super cheap Macbook Pro", "price": 2.99 }
]
},
"id": 1,
"total": 2.99,
"no_items": 1
},
{
"_links": {
"self": { "href": "/invoice/2" }
},
"_embedded": {
"items": [
{ "_links": { "self": { "href": "/product/2" }}, "id": 2, "name": "Raspberry Pi", "price": 34.87 },
{ "_links": { "self": { "href": "/product/3" }}, "id": 3, "name": "Random product", "price": 30 },
{ "_links": { "self": { "href": "/product/4" }}, "id": 4, "name": "More randomness", "price": 30 }
]
},
"id": 2,
"total": 94.87,
"no_items": 3
}
]
}
}
有了SpringDataREST和SpringHateOAS,我看到了两种轻松实现所需的方法
@Data
@Entity
public class Item {
@Id
@GeneratedValue
private Long id;
private String name;
}
@Data
@Entity
@Table(name = "customer_order")
public class Order {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private Collection<Item> items;
}
public interface ItemRepository extends CrudRepository<Item, Long> {
}
@RepositoryRestResource(excerptProjection = InlineItems.class)
public interface OrderRepository extends CrudRepository<Order, Long> {
}
@Projection(name = "inlineItems", types = Order.class)
public interface InlineItems {
String getName();
Collection<Item> getItems();
}
有了SpringDataREST和SpringHateOAS,我看到了两种轻松实现所需的方法
@Data
@Entity
public class Item {
@Id
@GeneratedValue
private Long id;
private String name;
}
@Data
@Entity
@Table(name = "customer_order")
public class Order {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private Collection<Item> items;
}
public interface ItemRepository extends CrudRepository<Item, Long> {
}
@RepositoryRestResource(excerptProjection = InlineItems.class)
public interface OrderRepository extends CrudRepository<Order, Long> {
}
@Projection(name = "inlineItems", types = Order.class)
public interface InlineItems {
String getName();
Collection<Item> getItems();
}
@丹尼斯。“是的,我两个都用。”丹尼斯。是的,我两者都用。