春季数据休息 - 在库PUT静静地失败对孩子的引用

问题描述 投票:1回答:1

我用Spring Data RestSpring Boot 2.1.1.RELEASE。

我有一个类User@ManyToMany关系到一个类Skill

  • 当我做一个POST创建与他的知识的用户,一切正常精细。
  • 当我做一个PUT更新用户,不更新的技能,产生任何错误。
  • 但是,当我做一个PATCH代替PUT的,这个技能是正确更新。

有没有人遇到了类似的问题?我发现它的另一个(旧)的问题,但没有解决方案(Spring Data Rest - PUT is not working for associated reference types?

我可能错过了一些东西,某处......

(代码使用Lombok的)

@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工作,不是吗?

java spring-data-rest
1个回答
3
投票

更多的调查之后,似乎这种行为是目的:将不会更新资源的链接,只有主属性。

从奥利弗·基尔克答案就在这里: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块。我们在这种情况下两种选择:抹未交到协会,它打破了“把你会得到什么”的做法。只有抹正在使用空排序将模糊的“你把资源的整个状态”提供的电源。
  2. 在1中提到的所有原因有暴露专用关联资源可直接操纵。

所以看起来,如果你想在同一时间更改的资源加上协会的两个状态,我想揭露专门的资源来做到这一点是要走的路。

其他的帖子和链接:

© www.soinside.com 2019 - 2024. All rights reserved.