Spring JSON Patch не может обновить вложенный объект Map - PullRequest
0 голосов
/ 17 января 2019

в моем приложении я пытаюсь поддерживать запросы исправлений 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, обычными полями, чтобы это работало.

1 Ответ

0 голосов
/ 06 февраля 2019

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

См .:

...