繁体   English   中英

是否有反序列化 Map 的内置方法<string,string>在 Jackson</string,string>

[英]Is there a built in way to deserialize Map<String,String> in Jackson

API 正在返回这样的 map 条目数组

[
{"key":"Key1","value":"Value1"},
{"key":"Key2","value":"Value2"}, 
{"key":"Key3","value":"Value3"},
....
]

我想将它直接反序列化为Map<String,String>所以它会变成

Map<String,String> {Key1->Value1, Key2->Value2, Key3->Value3}

明显的解决方案是反序列化为List<ApiMapEntry>但也许有更简单的方法?

我现在在做什么:

@JsonProperty
public void setMyTargetMap(List<ApiMapEntryWrapper> wrappers) {
    this.myTargetMap= wrappers.stream().collect(Collectors.toMap(ApiMapEntryWrapper::getKey, ApiMapEntryWrapper::getValue));
}

class ApiMapEntryWrapper{
   private String key;
   private String value;
}

虽然我会在不需要ApiMapEntryWrapper的情况下寻找类似(参考示例 json)的东西

@JsonMap(keyName="key",valueName="value")
private Map<String,Strin> myTargetMap

Jackson 默认可以反序列化为Map<String, String> 所以以下应该默认工作。

@GetMapping
public void getSomething(@RequestBody Map<String,String> map) {
      ....
}

但是您的情况似乎有所不同,因为您希望 List 中有多个 JSON 对象,其中key : somekey , value : somevalue的重复信息。 keyvalue是列表中每个 object 的重复信息。

在看到来自 IMO 评论的更多反馈后,最好的办法是引入一个自定义反序列化,用于将输入 JSON 转换为Map<String, String> 有关自定义反序列化器和示例的更多信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM