使用Spring数据Rest发布到集合关联

使用Spring数据Rest发布到集合关联,spring,rest,jpa,spring-data-rest,Spring,Rest,Jpa,Spring Data Rest,我很难创建一个收藏协会,我可以张贴。 我有两个实体,设备和组,具有多对多关系。使得设备可以在零个或多个组中,并且一个组可以包含零个或多个设备 我可以通过发布到/api/devices和/api/groups/来创建新的设备和组实体。根据我对文档的阅读,devices集合中的设备应该有一个RestResource,它表示该设备所属的组集合(即/api/devices/{deviceId}/groups)。这是一个“关联资源”由于它是Set的一个实例,我本以为它被视为一个集合关联。我可以获取uri列

我很难创建一个收藏协会,我可以张贴。 我有两个实体,设备和组,具有多对多关系。使得设备可以在零个或多个组中,并且一个组可以包含零个或多个设备

我可以通过发布到/api/devices和/api/groups/来创建新的设备和组实体。根据我对文档的阅读,devices集合中的设备应该有一个RestResource,它表示该设备所属的组集合(即/api/devices/{deviceId}/groups)。这是一个“关联资源”由于它是
Set
的一个实例,我本以为它被视为一个集合关联。我可以获取
uri列表并将其放入该关联,但当我发布到它时,我会得到一个404

该列表可能会变得相当大,我希望能够发布一个新的收藏协会链接,而不必下载整个内容修改它并将其放回

政府说这应该得到支持,但我运气不好

如有任何建议,将不胜感激

这些域类定义为:

@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
}
@实体
公共类设备{
@身份证
@生成值
私人长id;
私有字符串名称;
@ManyToMany(targetEntity=Group.class,cascade=CascadeType.ALL)
私有集合组;
//能手,二传手
}
以及

@实体(name=“设备组”)
公共课组{
@Id@GeneratedValue
私人长id;
私有字符串名称;
@许多(mappedBy=“组”)
专用设备;
//能手,二传手
}
每个存储库都声明了一个存储库:

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

public interface GroupRepository extends PagingAndSortingRepository<Group, Long> {        
}
公共接口设备存储库扩展了分页和排序存储库{
}
公共接口组存储库扩展了分页和排序存储库{
}

使用修补程序,这样您就不必获取现有集合。只需使用新链接调用修补程序,现有集合就会得到更新。例如:

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

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
将多个设备添加到现有集合:

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数据REST编写的好例子有:

春季宠物克林克项目

Spring数据REST入门


谢谢,效果很好。我还发现我可以通过删除(例如)从集合中删除单个条目。然而,目前有一个大的警告,即该关系必须由集团所有。但这只是JPA为您提供的。您知道是否可以使用
application/json
来实现这一点,以及语法是什么吗?我知道这很旧,但非常感谢您的回答,您帮了我很大的忙!