在典型情况下使用嵌入式资源
@Entity @Data
class Item {
id, name
...
@ManyToOne
@JoinColumn(name="status", referencedColumnName="ID")
private Status status;
}
@Entity @Data
class Status {
id, name
...
@JsonIgnore //break infinite reference loop during serialization
@OneToMany(mappedBy="status")
private List<Item> items;
}我希望在项 JSON中包含Status对象,而不是在Item JSON中具有状态id的链接
{
"itemName": "abc",
... ,
"status": {
"statusName":"ACTIVE",
...
}
"_links": {
...
}
}我成功地将嵌入到以下任何一个中:
@Entity @Data
class Item {
...
@RestResource(exported=false) // <-- HERE
@ManyToOne
@JoinColumn(name="status", referencedColumnName="ID")
private Status status; @RepositoryRestResource(collectionResourceRel="statuses", path="status", exported=false)
public interface StatusRepository extends JpaRepository<Status, String> // DELETED
@RepositoryRestResource
public interface StatusRepository extends JpaRepository<Status, String>{}问题:
其中的任何一个都会像我想要的那样将状态嵌入到条目JSON中,但是我不再可以访问来通过它的ID获取一个Status对象,或者在它上执行任何CRUD操作。
如何通过url?将状态嵌入到父项JSON和仍然CRUD状态中
发布于 2015-06-25 16:53:27
我将其具体实施如下:
@Entity @Data
class Item {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
String id;
String name
@RestResource(exported = false) // <---- ADDED
@ManyToOne
@JoinColumn(name="status", referencedColumnName="ID")
private Status status;
}
@Entity @Data
class Status {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
String id
String name
// <-------- DELETED REFERENCE TO PARENT OBJECT
//@OneToMany(mappedBy="status")
//private List<Item> items;
}两个实体的存储库都存在,因此也可以对状态实体执行CRUD。
@RepositoryRestResource(collectionResourceRel="items", path="items")
public interface StatusRepository extends JpaRepository<Item, String>
{}
@RepositoryRestResource(collectionResourceRel="statuses", path="statuses")
public interface StatusRepository extends JpaRepository<Status, String>
{}为了子孙后代,我会把它留在这里。
为方便起见:
1) JSON中实体的公开in
/**
* Exposing Ids as properties for entities specified
*/
@Configuration
public class ExposeIdConfig extends RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(Item.class, Status.class);
}
}因此,获取项目列表如下:
{
"_links": {
"self": {
"href": "http://localhost:8080/app/items{?page,size,sort}",
"templated": true
}
},
"_embedded": {
"as": [
{
"id": "29117425-f011-4ff9-8952-38b05d3df7f0",
"name": "item 1",
"status": {
"id": "e9192ae7-29f8-4d5e-ad62-cad8d87de9e2",
"name": "ACTIVE"
},
"_links": {
"self": {
"href": "http://localhost:8080/app/items/29117425-f011-4ff9-8952-38b05d3df7f0"
}
},
...
}https://stackoverflow.com/questions/31012628
复制相似问题