【问题标题】:Spring Data Rest PATCH add to embedded listSpring Data Rest PATCH 添加到嵌入式列表
【发布时间】:2019-10-30 23:56:59
【问题描述】:

我在使用 Spring Data Rest 和 PATCH 请求添加到嵌入式列表时遇到了困难。我使用的是 MongoDB,所以这里没有 JPA 连接(ManyToOne 等),只是一个普通的旧常规嵌入式子类型列表。

我的豆子是这样的:

class Parent {
  String name;
  List<Child> children;
}

class Child {
  String name;
}

我的请求如下所示:

curl -d '{"children": [ {"name": "bob"} ] }' -H "Content-Type: application/json" -X PATCH http://localhost:8080/api/parent/123

这样做的结果是所有子元素都被请求中的新元素替换,例如

old:     [ 'tom', 'sally' ]
request: [ 'bob' ]
expected result: [ 'tom', 'sally', 'bob']
actual result:   [ 'bob' ]

我已经浏览了 Spring 代码 (DomainObjectReader),但它似乎无法处理我的场景,但肯定这是一个非常简单的用例,有什么想法吗?我错过了什么明显的东西吗?

谢谢!

【问题讨论】:

  • 这是一个非常简单的用例。如果您考虑一下,框架如何准确地确定您是要添加到集合中还是简单地替换它。只是一个想法。

标签: spring mongodb rest patch spring-data-rest


【解决方案1】:

问题是您尝试编辑父对象,而不是关系集合。

  1. 您需要创建一个孩子:
   POST /api/child  {...}

返回新创建的子节点的 url(在位置标头中或作为响应中的自链接 - 基于您的 SDR 设置)

  1. 然后将此子项添加到父项的子项集合中:
   PATCH /api/parent/123/children
   Content-Type:text/uri-list
   body: ***the URI of the child***

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 2018-01-08
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多