Spring Data Rest PATCH добавить во встроенный список - PullRequest
0 голосов
/ 31 октября 2019

У меня проблемы с добавлением во встроенный список с использованием 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) и он просто не подходит для моего сценария, но, конечно, это действительно простой вариант использования, есть идеи? Я что-то упускаю из виду?

Спасибо!

1 Ответ

0 голосов
/ 03 ноября 2019

Проблема в том, что вы пытаетесь редактировать родительский объект, а не коллекцию отношений.

  1. Вам необходимо создать дочерний объект:
   POST /api/child  {...}

, которыйвозвращает URL-адрес только что созданному дочернему элементу (либо в заголовке местоположения, либо в качестве самостоятельной ссылки в ответе - в зависимости от настроек SDR)

Затем добавьте этого потомка в коллекцию детей родителя:
   PATCH /api/parent/123/children
   Content-Type:text/uri-list
   body: ***the URI of the child***
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...