我用Spring Data Rest
与Spring Boot
2.1.1.RELEASE。
我有一堂课User
和一个班级有@ManyToMany
关系Skill
。
POST
用自己的技能创建用户时,一切工作正常。PUT
更新用户时,技能不会更新,不会产生任何错误。PATCH
代替a时PUT
,技能会正确更新。我可能在某处错过了一些东西…
(使用龙目岛代码)
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
@ManyToMany
@JoinTable(name="user_skills")
private List<Skill> skills = new ArrayList<>();
}
@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
public class Skill {
@Id
@GeneratedValue
private Long id;
private String name;
}
我PUT
用以下JSON
内容制作:
{
"id": 7,
"firstName": "John",
"lastName": "Doe",
"skills": ["http://localhost:9001/skills/1", "http://localhost:9001/skills/2", "http://localhost:9001/skills/3"]
}
firstName或lastName可以修改,但是技能保持不变。
如果我PATCH
使用相同的有效载荷进行操作,则技能将正确修改。
它应该与一起使用PUT
,不是吗?
经过更多调查后,似乎此行为是有目的的:PUT不会更新资源链接,而只会更新主要属性。
来自Oliver
Gierke的答案是在这里:https :
//jira.spring.io/browse/DATAREST-1001?focusedCommentId
= 135791
& page
=
com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-
tabpanel#comment-135791 :
我调查了一下,我认为您期望事情以不起作用的方式起作用。PUT请求不考虑与可链接资源的关联,即链接指向的相关资源。其原因有两个:
1.
如果我们考虑有效载荷中用于关联字段的URI以更新那些关联,则会出现一个问题,即如果未指定URI将会发生什么情况。就当前行为而言,链接关联根本不属于有效负载,因为它们仅位于_links块中。在这种情况下,我们有两种选择:清除不处理的关联,这会破坏“输入得到的内容”方法。仅擦除使用null提供的内容会模糊“您放置资源的整个状态”。
2. 出于1.中提到的所有原因,公开了专用的联合资源,可以直接对其进行操作。
因此,如果您要同时更改资源状态和关联状态,则看起来就像暴露一个专用资源来做到这一点。
其他帖子和链接:
我在本地环境中创建了一个带有Laravel 7的网络应用程序,它有一个选项,用户可以上传和更改他们的个人资料图像。它在当地环境中运行良好。最近我把这个项目上传到一个子域下的实时服务器上。我把所有公共文件放在子域文件夹中,其他文件放在根文件夹中。像这样。 文件结构 现在当我运行 它将文件/public/images中的图像上传到hello中。实例com/images 文件上载代码:
如何在GitHub上配置存储库,以便在不克隆整个存储库的情况下安装程序(任何版本,将有两个存储库)。克隆将通过Linux完成。该程序打包在中。焦油gz格式。
我去了src目录,查看了zlib文件夹,然后看到…。它是空的... 现在,当我转到https://github.com/wxwidgets/wxwidgets/tree/master/src并浏览到zlib文件夹时,它不是空的。但是,在上面的链接中,zlib文件夹被标记了类似“@5888671”的东西。在expat、jpeg、png和tiff文件夹上也有类似的标记。当我克隆存储库时,所有提到的文件
问题内容: 我想在我的新django项目中遵循RESTful模式,并且我想知道发出PUT / DELETE请求时参数在哪里。 据我所知,我只在请求中看到GET&POST QueryDict,没有其他人。Django是针对请求添加新的PUT还是DELETE QueryDict,还是将参数添加到GET或POST QueryDict? 问题答案: 我正在使用django v1.5。我主要使用Quer
Quarkus 1.8.3。最终的 直接调用访问PanacherRepository的方法可以按预期工作,但是当通过EventBus调用同一方法时,调用到达该方法并执行每一行,直到它到达任何存储库调用,然后在没有任何发生的指示的情况下无声地失败/退出。 根据日志,直接调用在Quarkus主线程中执行,事件总线调用在vert中执行。x-eventloop-thread-2。 还尝试了以下步骤的组合,