使用Spring Data Rest将数据POST到集合关联

4
我在创建一个集合关联时遇到了困难,两个实体是 Device 和 Group,它们之间有多对多的关系。一个 Device 可以属于零个或多个 Group,一个 Group 也可以包含零个或多个 Device。
我可以通过 POST 请求到 /api/devices 和 /api/groups 创建新的 Device 和 Group 实体。根据文档,设备在 devices 集合中应该有一个 RestResource 来表示设备所属的组的集合(即 /api/devices/{deviceId}/groups)。这是一个“关联资源”,由于它是 Set 的实例,我认为它被视为集合关联。我可以获取和 PUT uri-list 到这个关联,但当我向它 POST 时,会得到 404 错误。
这个列表可能会变得非常大,我希望能够 POST 一个新链接到集合关联中,而不必下载整个列表进行修改,然后再将其 PUT 回去。 documenation 中说应该支持这样做,但我没有成功。
Any suggestions would be most appreciated. (任何建议都将不胜感激。)
These Domain Classes are defined as:(这些领域类别被定义为:)
@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> {        
}
2个回答

8
利用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

谢谢,这很有效。我还发现我可以通过删除(例如)http://localhost:8080/app/group/87/devices/3 来从集合中删除单个条目。然而,目前有一个大的限制条件,那就是关系必须由该组拥有。但这只是JPA而已。 - OwainD
2
有没有想法能否使用 application/json 来实现这个功能,语法会是什么样子? - Petar Tahchiev
我知道这已经过时了,但非常感谢您的回答,您帮助了我很多! - pricetag

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接