使用Spring Data Rest发布到集合关联

Owa*_*inD 4 rest spring jpa spring-data-rest

我很难创建一个可以POST的集合关联.我有两个实体,设备和组,具有多对多关系.这样设备可以是零个或多个组,组可以包含零个或多个设备.

我可以通过POST到/ api/devices和/ api/groups /创建新的设备和组实体.从我对文档的阅读中,设备集合中的设备应该有一个RestResource,它表示设备所属的组的集合(即/ api/devices/{deviceId}/groups.这是一个"关联资源",因为它是Set<Group>我的一个实例,我会认为它被认为是一个收集协会.我可以得到和PUT 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
}
Run Code Online (Sandbox Code Playgroud)

和,

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

    private String name;

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

    // getters, setters
}
Run Code Online (Sandbox Code Playgroud)

每个人都有一个声明的存储库:

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

public interface GroupRepository extends PagingAndSortingRepository<Group, Long> {        
}
Run Code Online (Sandbox Code Playgroud)

cha*_*ybr 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • 任何想法是否可以用`application/json`来做这个和语法是什么? (2认同)