我很难创建一个可以POST的集合关联。 我有两个实体,设备和组,具有多对多关系。这样设备可以是零个或多个组,一个组可以包含零个或多个设备。
我可以通过POST到/ api / devices和/ api / groups /来创建新的设备和组实体。从我对文档的阅读中,设备集合中的设备应该有一个RestResource,它表示设备所属的组的集合(即/ api / devices / {deviceId} / groups。这是一个&#34;关联资源&#34;并且因为它是Set<Group>
的一个实例,我会认为它被视为一个集合关联。我可以得到并将uri-list
转到这个关联,但是当我发布它时我得到了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> {
}
答案 0 :(得分: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
答案 1 :(得分:0)
您还可以使用PUT请求。用Spring Data REST编写的很好的例子是:
Spring Pet Clinck项目
Spring Data REST Primer