Ответ 1
Мне удалось изменить дочерний объект следующим образом. В качестве образца я использовал следующие объекты:
@Entity
@Data
@NoArgsConstructor
public class One {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(cascade = ALL)
private List<Many> manies = new ArrayList<>();
}
@Entity
@Data
@NoArgsConstructor
public class Many {
public Many(String name) {
this.name = name;
}
@Id
@GeneratedValue
private Long id;
private String name;
}
У меня есть только репозиторий для One
.
(Мои примеры используют отличный httpie - клиент HTTP CLI)
Удаление элемента с помощью json-патча
В этом примере будет удален второй элемент в списке муай. Вы можете использовать @OrderColumn, чтобы убедиться, что вы можете положиться на порядок элементов списка.
echo '[{"op":"remove", "path":"/manies/1"}]' | http PATCH :8080/ones/1 Content-Type:application/json-patch+json -v
PATCH /ones/1 HTTP/1.1
Content-Type: application/json-patch+json
[
{
"op": "remove",
"path": "/manies/1"
}
]
Замена всего списка с помощью json patch
Этот образец заменяет список массивом, указанным в значении.
echo '[{"op":"add", "path":"/manies", "value":[{"name":"3"}]}]' | http PATCH :8080/ones/1 Content-Type:application/json-patch+json -v
PATCH /ones/1 HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
[
{
"op": "add",
"path": "/manies",
"value": [
{
"name": "3"
}
]
}
]
Добавление элемента в список с помощью json patch
Этот пример добавляет элемент в конец списка. Также здесь клиент просто должен знать длину списка перед обновлением. Таким образом, порядок здесь не имеет никакого значения.
echo '[{"op":"add", "path":"/manies/-", "value":{"name":"4"}}]' | http PATCH :8080/ones/1 Content-Type:application/json-patch+json -v
PATCH /ones/1 HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
[
{
"op": "add",
"path": "/manies/-",
"value": {
"name": "4"
}
}
]
Надеюсь, что это поможет.