Spring数据休息合并补丁

时间:2016-07-04 20:45:47

标签: java spring spring-data-rest

我在我的项目中使用 spring data rest 并对此有疑问 application/merge-patch+json请求。 虽然application/json-patch+json请求工作正常,但我在使用merge-patch时遇到了麻烦。 例如,我有没有像这样的存储库的嵌套对象

"student":{
  "id":1,
  "address":{
   "id":1,
   "street":2,
   "building":2
 }
}

我将PATCHapplication/merge-patch+json发送给students/1 使用此有效负载

{
  "address":{
   "street":3
  }
}

我收到了这个结果

"student":{
  "id":1,
  "address":{
   "id":2,
   "street":3,
   "building":null
 }
}

因此Spring数据只是创建了新的地址对象而不是合并。

Java代码就像这样

@Entity
@Table(name = "Student")
public class Student {
    @Id
    @GeneratedValue
    private long studentId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "addressId")
    private Address address;

    //getters and setters
}

地址类:

@Entity
@Table(name = "Address")
public class Address {
     @Id
     @GeneratedValue
     private long addressId;
     private String street;
     private String building;

     //getters and setters
}

此外,学生还有休息库和地址

我的问题是如何在Spring数据休息中合并补丁请求时能够实现正确的行为?

1 个答案:

答案 0 :(得分:0)

尽管它会延迟响应,但对遇到同样问题的其他人可能会有帮助

在输入的JSON中,缺少地址 id

{
  "address":{
   "id" : 1,  
   "street":3
  }
}