【问题标题】:POSTing to a collection association using Spring Data Rest使用 Spring Data Rest 发布到集合关联
【发布时间】:2015-07-06 01:55:37
【问题描述】:

我很难创建可以发布到的集合关联。 我有两个实体,设备和组,具有多对多关系。这样一个设备可以在零个或多个组中,一个组可以包含零个或多个设备。

我可以通过 POST 到 /api/devices 和 /api/groups/ 来创建新的设备和组实体。从我对文档的阅读中,设备集合中的设备应该有一个 RestResource 代表设备所属的组的集合(即/api/devices/{deviceId}/groups。这是一个“关联资源”和因为它是Set<Group> 的一个实例,所以我会认为它被视为一个集合关联。我可以将uri-lists 获取并放入该关联,但是当我发布到它时,我得到一个404。

该列表可能会变得非常大,我希望能够发布一个指向收藏关联的新链接,而无需下载整个内容进行修改并返回PUT

documenation 说应该支持,但我没有运气。

任何建议将不胜感激。

这些域类定义为:

@Entity
public class Device {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @ManyToMany(targetEntity = Group.class, cascade = CascadeType.ALL)
    private Set<Group> groups;

    // getters, setters
}

和,

@Entity(name="device_groups")
public class Group {
    @Id @GeneratedValue
    private Long id;

    private String name;

    @ManyToMany(mappedBy = "groups")
    private Set<Device> devices;

    // getters, setters
}

每个都声明了一个存储库:

public interface DeviceRepository extends PagingAndSortingRepository<Device, Long> {
}

public interface GroupRepository extends PagingAndSortingRepository<Group, Long> {        
}

【问题讨论】:

    标签: spring rest jpa spring-data-rest


    【解决方案1】:

    利用 PATCH,这样您就无需获取现有集合。只需使用新链接调用 PATCH,现有集合就会更新。例如:

    将新链接(设备)添加到集合中:

    curl -i -X PATCH -H "Content-Type: text/uri-list" -d "http://localhost:8080/app/device/1" http://localhost:8080/app/group/87/devices
    

    将多个设备添加到现有集合中:

    curl -i -X PATCH -H "Content-Type: text/uri-list" -d "
    http://localhost:8080/app/device/2
    http://localhost:8080/app/device/3" http://localhost:8080/app/group/87/devices
    

    【讨论】:

    • 谢谢,效果很好。我还发现我可以通过删除(例如)localhost:8080/app/group/87/devices/3 从集合中删除单个条目。然而,目前有一个重大警告,即该关系必须由集团所有。但这只是适合您的 JPA。
    • 知道是否可以使用application/json 执行此操作,语法是什么?
    • 我知道这是旧的,但非常感谢你的回答,你帮了我很大的忙!
    【解决方案2】:

    您也可以使用 PUT 请求。用 Spring Data REST 编写的很好的例子是:

    Spring Pet Clinck 项目

    Spring Data REST 入门

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 2014-10-08
      • 2018-07-23
      • 1970-01-01
      • 2018-10-08
      • 2016-08-27
      • 2017-11-13
      • 2017-04-22
      相关资源
      最近更新 更多