Spring JSON修补程序无法更新嵌套Map对象

克鲁鲁巴

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

我无法使用Spring Patch实现来部分更新Java中的Map,或者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),以使其正常工作。

le

对于尚未看到相应问题并提出请求的所有其他问题,这里似乎已解决,只需在我们的项目中对其进行验证(PATCHing a Map<Locale, String>)即可。

参考:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章