使用 Spring 数据 Rest 发布到 collection 关联
POSTing to a collection association using Spring Data Rest
我很难创建一个我可以 POST 加入的 collection 协会。
我有两个实体,设备和组,具有多对多关系。这样一个设备可能在零个或多个组中,一个组可能包含零个或多个设备。
我可以通过 POSTing 到 /api/devices 和 /api/groups/ 创建新的设备和组实体。根据我对文档的阅读,devices collection 中的 Device 应该有一个 RestResource,代表设备所属的 collection 组(即 /api/devices/{deviceId}/groups . 这是一个 "association resource" 并且因为它是 Set<Group>
的一个实例我会认为它被视为一个 collection 关联。我可以获取并 PUT uri-list
s 到这个协会,但是当我 post 到它时,我得到一个 404.
列表可能会变得非常大,我希望能够 post 一个新的 link 到 collection 协会,而不必下载整个东西修改它和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> {
}
利用 PATCH,这样您就不必获取现有集合。只需使用 new link 调用 PATCH 即可更新现有集合。例如:
将新的 link(设备)添加到集合中:
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
您也可以使用 PUT 请求。用 Spring Data REST 编写的好例子是:
Spring Pet Clinck 项目
A Spring 数据 REST 入门
我很难创建一个我可以 POST 加入的 collection 协会。 我有两个实体,设备和组,具有多对多关系。这样一个设备可能在零个或多个组中,一个组可能包含零个或多个设备。
我可以通过 POSTing 到 /api/devices 和 /api/groups/ 创建新的设备和组实体。根据我对文档的阅读,devices collection 中的 Device 应该有一个 RestResource,代表设备所属的 collection 组(即 /api/devices/{deviceId}/groups . 这是一个 "association resource" 并且因为它是 Set<Group>
的一个实例我会认为它被视为一个 collection 关联。我可以获取并 PUT uri-list
s 到这个协会,但是当我 post 到它时,我得到一个 404.
列表可能会变得非常大,我希望能够 post 一个新的 link 到 collection 协会,而不必下载整个东西修改它和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> {
}
利用 PATCH,这样您就不必获取现有集合。只需使用 new link 调用 PATCH 即可更新现有集合。例如:
将新的 link(设备)添加到集合中:
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
您也可以使用 PUT 请求。用 Spring Data REST 编写的好例子是:
Spring Pet Clinck 项目
A Spring 数据 REST 入门