首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春天的水。嵌入式资源+清理能力?

春天的水。嵌入式资源+清理能力?
EN

Stack Overflow用户
提问于 2015-06-23 20:15:22
回答 1查看 951关注 0票数 0

在典型情况下使用嵌入式资源

代码语言:javascript
复制
@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的链接

代码语言:javascript
复制
        {
            "itemName": "abc",
              ... ,
            "status": {
                "statusName":"ACTIVE",
                  ...
            }
            "_links": {
              ...
            }
        }

我成功地将嵌入到以下任何一个中:

  • 状态属性标记为@RestResource(exported=false)
代码语言:javascript
复制
    @Entity @Data
    class Item {
        ...
        @RestResource(exported=false) // <-- HERE
        @ManyToOne
        @JoinColumn(name="status", referencedColumnName="ID")
        private Status status;
  • 标记状态回购接口@RepositoryRestResource(.,exported=false)
代码语言:javascript
复制
    @RepositoryRestResource(collectionResourceRel="statuses", path="status", exported=false)
    public interface StatusRepository extends JpaRepository<Status, String>
  • 删除状态实体的存储库
代码语言:javascript
复制
    // DELETED
    @RepositoryRestResource
    public interface StatusRepository extends JpaRepository<Status, String>{}

问题:

其中的任何一个都会像我想要的那样将状态嵌入到条目JSON中,但是我不再可以访问来通过它的ID获取一个Status对象,或者在它上执行任何CRUD操作。

如何通过url?将状态嵌入到父项JSON和仍然CRUD状态中

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 16:53:27

我将其具体实施如下:

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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

代码语言:javascript
复制
/**
 * 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);
  }
}

因此,获取项目列表如下:

代码语言:javascript
复制
{
  "_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"
        }
  },
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31012628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档