[英]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.