【问题标题】:Spring JSON Patch unable to update nested Map objectSpring JSON Patch 无法更新嵌套的 Map 对象
【发布时间】:2019-01-17 08:52:45
【问题描述】:

在我的应用程序中,我尝试支持 JSON 补丁请求以应用部分更新我的实体,并且我直接使用 Spring 在 spring-data-rest 库中提供的 Patch 实现。

我无法使用 Spring Patch 实现部分更新 Java 中的 Maps,或者 Spring 实现不支持此类操作。

Spring Patch 将 JSON 补丁操作转换为 SPEL 操作,对于具有固定属性(或字段)的 POJO,一切正常,但它似乎不适用于 Maps,我认为“字段”是 Map 的键。

知道 Spring 在幕后将 JSON 路径转换为 ​​SPEL 操作,我还尝试在我的 PATCH 有效负载中使用 SPEL 表示法,但没有任何结果。这是我尝试过的

假设是这样的情况:

//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 spring spring-data-rest json-patch


【解决方案1】:

对于尚未看到相应问题和拉取请求的所有其他人,这里似乎已修复,只是为我们的项目验证了它(修补 Map&lt;Locale, String&gt;)并且它有效。

参考:

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2021-01-10
    • 1970-01-01
    • 2018-12-23
    • 2020-05-22
    相关资源
    最近更新 更多