簡體   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