Патч Spring JSON не может обновить вложенный объект карты

в моем приложении я пытаюсь поддерживать запросы на исправление JSON для частичного обновления моих сущностей, и я использую напрямую реализацию Patch, предоставленную Spring в библиотеке spring-data-rest.

Я не могу использовать реализацию Spring Patch для частичного обновления карт в Java, или реализация Spring не может поддерживать такую ​​операцию.

Spring Patch преобразует операции исправления JSON в операции SPEL, и все работает нормально с POJO, имеющими фиксированные свойства (или поле), но, похоже, не работает с картами, где я бы предположил, что «поля» являются ключами карты.

Зная, что за кулисами Spring преобразует путь JSON в операцию SPEL, я также попытался использовать нотацию SPEL в своей полезной нагрузке PATCH, но безрезультатно. Это то, что я пробовал

Предположим, такая ситуация:

//Here is my object
public class Book {

    public String author;

    public String ISBN;

    public Map<String, String> characters;


}

// Here I create a simple instance of the object
Book myBook = new Book();
myBook.author = "Me"
myBook.ISBN = "1234567890"
myBook.characters = new HashMap<>();
myBook.characters.put("protagonist", "Pinco");
myBook.characters.put("antagonist", "Pallo");
// Here the type of operations that work
[
    {"op": "replace", "path": "/author", "value": "NewAuthor"},
    {"op": "replace", "path": "/ISBN", "value": 0987654321 },
]

// I can also modify completely the Map if I want
[
    {"op": "replace", "path": "/characters", "value": {"protagonist": "Pallo", "antagonist": "Pinco"} }
]

// But I can't update a single value in the map
[
    {"op": "replace", "path": "/characters/protagonist", "value": "Pallo" },
    {"op": "replace", "path": "/characters/antagonist", "value": "Pinco" }
]

// I've also tried weird stuff, but doesn't work
[
    {"op": "replace", "path": "/characters[antagonist]", "value": "Pinco"}
]

Я ожидал, что операция замены на вложенной карте сработает, проверив ключ, но, возможно, я делаю что-то не так или мне нужно просто представить все объекты, такие как POJO, с обычными полями, чтобы это работало.

Подтверждено для меня. Что касается Указатель JSON RFC6901 и Патч JSON RFC6902, ваши операции, похоже, исправлены. Мои похожи.

mle 06.02.2019 13:58
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
1
1 543
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для всех остальных, которые еще не видели соответствующую проблему и запрос на перенос для этого, здесь, похоже, он исправлен, просто проверил его для нашего проекта (исправление Map<Locale, String>), и он сработал.

Ссылаться на:

Другие вопросы по теме