【问题标题】:Spring Data Rest OneToMany POST JSON With Child Entity带有子实体的 Spring Data Rest OneToMany POST JSON
【发布时间】:2017-02-09 13:57:31
【问题描述】:

从昨天开始我一直在寻找这个问题的答案,但一直没有成功。

你能同时保存一个实体和它的子实体吗?据我所见,这样做的方法是保存实体,点击响应中的链接,然后添加子实体。有没有办法一次性发完?

{
    "name": "some-name",
    "age": "30",
    "address": {
        "street": "some-street",
        "city": "some-city"
    }
}

在上面的例子中,我们有一个Person 实体,它与Address 实体有一个OneToMany 关系。我知道您保存Person,从响应中获取链接,然后保存Address,但如果可能的话,一次性完成所有操作会很方便。我假设它不可能开箱即用,但我想在编写自定义控制器方法以一次性处理它之前先问一下。

【问题讨论】:

  • 如果我知道你想用这里的地址保存一个新人,只使用一个操作保存,比如 entitmamager.persist(person) ?我认为这会很好,但每次你保存一个新人时,都会为这个人创建一个新地址!
  • 不一定:包含 id 字段的 PUT 会更新现有地址。

标签: spring spring-data spring-data-rest


【解决方案1】:

这将适用于通过 POST 添加新实体。对于编辑现有实体,如果您包含所有数据并在 JSON 中公开 ID,这也可以通过 PUT 请求工作。

例如

public class MvcConfiguration extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        super.configureRepositoryRestConfiguration(config);

        config.exposeIdsFor(/*Person.class,*/ Address.class);
    }
}

PUT /person/123

{
    //"id" : 123, prob not required
    "name": "new-name",
    "age": "30",
    "address": {
        "id": 1, //required
        "street": "new-street",
        "city": "some-city"
    }
}

我在有多个嵌套级别和集合时使用过,但仅在子实体没有自己的 REST 端点时使用:我不确定这是否会对事情产生任何影响。

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2012-10-04
    相关资源
    最近更新 更多