[英]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
的重复信息。 key和value是列表中每个 object 的重复信息。
在看到来自 IMO 评论的更多反馈后,最好的办法是引入一个自定义反序列化,用于将输入 JSON 转换为Map<String, String>
。 有关自定义反序列化器和示例的更多信息,请参见此处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.