我有一个问题,我不能决定如何处理这件事..我需要知道是否有任何标准的方法来解决这个问题......或者如果你们对这件事有任何重要的意见.
问题是我已经开始构建一个非常基本的API用于学习目的API是一个简单的音乐商店..商店有一些需要和艺术家的相册.
因此,关系是艺术家<--- 1 -----*--->专辑,并且对于专辑而言,要求专辑具有艺术家.但艺术家并不需要和专辑.
现在问题......
由于这种关系,如果我想创建一个新的专辑..我将不得不发布专辑数据..和整个Arist数据..不仅仅是艺术家的ID ..但整个艺术家......似乎没有如果你问我我非常有效..因为那很多不必要的.
因此,我认为有两种方法可以解决这个问题...要么我只发布整个相册数据/对象,并允许对象的艺术家数据只包含一个ID,然后引用艺术家.
所以不是张贴:
{
"Name":"AlbumName",
"Description":"Some description for the album",
"ReleaseYear": "1992",
"Artist" {
"Name":"Some artist",
"Id":"12345",
"Biography":"Lorem ipsum dolor sit amet"
}
}
Run Code Online (Sandbox Code Playgroud)
我会这样做:
{
"Name":"AlbumName",
"Description":"Some description for the album",
"ReleaseYear": "1992",
"Artist" {
"Id":"12345"
}
}
Run Code Online (Sandbox Code Playgroud)
选项二是实际上有一个特定于此的路由/网址...例如:/ api/artist/{artistid}/album然后只需将一个相册对象发布到该网址即可.
但正如我所说..我真的不确定这里是非是对错..还是有任何标准的处理方式?
提前致谢!
我想在一次调用中创建另一个资源的子资源.这些资源具有以下@ManyToMany关系:用户和组.
我不首先要创建一个用户,则该组并因为它显示在关系后,用关系在春季数据REST工作 -只是因为我认为不能单独存在,比如一组资源,应该仅当至少一个用户也与该资源相关联时才会创建.为此,我需要像这样的一个端点(这对我不起作用,否则我不会在这里)创建一个组,并在一个事务中设置关联的"种子"用户.
目前,使这项工作的唯一方法是手动"同步"关系,如下所示:
public void setUsers(Set<AppUser> users) {
users.forEach(u -> u.getGroups().add(this));
this.users = users;
}
Run Code Online (Sandbox Code Playgroud)
这将允许我
POST http://localhost:8080/groups
{
"name": "Group X",
"users": ["http://localhost:8080/users/1"]
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是,这对我来说感觉不对 - 它看起来似乎是一种解决方法,而不是实际的Spring方式使这个要求工作.那么......
我目前正在努力使用Spring创建关系资源@RepositoryRestResource.我想创建一个新组并将其与调用用户关联,如下所示:
POST http://localhost:8080/users/1/groups
{
"name": "Group X"
}
Run Code Online (Sandbox Code Playgroud)
但唯一的结果就是回应204 No Content.我不知道为什么.这可能与我的另一个问题(见这里)有关,也可能没有,我试图通过在JSON有效载荷中设置相关资源来实现同样的目标 - 这也不起作用.
服务器端我收到以下错误:
tion$ResourceSupportHttpMessageConverter : Failed to evaluate Jackson deserialization for type [[simple type, class org.springframework.hateoas.Resources<java.lang.Object>]]: java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
如果您需要任何特定代码,请告诉我.
我添加exported = …