第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Jackson HashMap,寫入字符串時忽略地圖名稱

Jackson HashMap,寫入字符串時忽略地圖名稱

人到中年有點甜 2023-05-10 13:31:55
考慮像這樣的 JSON:{"randomName1": {    "knownfield1": "a",    "knownfield2": [1,3,2,4]},"randomName2": {    "knownfield1": "0.20",    "knownfield2": [1,2,3,4]}}public class PojoForJson {HashMap<String, PojoType1> map = new HashMap<>();@JsonAnyGetterpublic HashMap<String , PojoType1> pojoType1Getter(){    return map;}@JsonAnySetterpublic void pojoType1Setter(String key, PojoType1 value){    map.put(key,value);}}如果我有PojoForJson pojo = new ObjectMapper().readValue(jsonInput,PojoForJson.class);然后我試著把它寫回 Json,我必須打電話,它工作正常。new ObjectMapper().writeValueAsString(pojo.getMap());現(xiàn)在,這是另一個 POJO 中的一個字段,我們稱它為 PojoMain:@Builder     public class PojoMain {@Getter @Setterprivate Type1 t1;@Getter @Setterprivate Type2 t2;@Getter @Setter @JsonUnwrappedprivate PojoForMap pojoForMap;}預(yù)期結(jié)果將是一個 JSON 看起來像    {       "t1":{...},      "t2":{...},      "randomName1":{...},      "randomName2":{...},      ...............    }相反,它是{           "t1":{...},          "t2":{...},          "pojoForMap":{             "map":{                "randomName1":{...},                 ...             }           }        }如果我將 pojoForMap 更改為HashMap<String, PojoType1>@Builder         public class PojoMain {    @Getter @Setter    private Type1 t1;    @Getter @Setter    private Type2 t2;    @Getter @Setter @JsonUnwrapped    private HashMap<String, PojoType1> pojoForMap;    }我仍然得到:{               "t1":{...},              "t2":{...},              "pojoForMap":{                   "randomName1":{...},                    ........                }               }            }我的問題是,我怎樣才能在沒有任何字段名稱的情況下在主 POJO 中自己序列化映射條目?我過去曾使用 List 來放棄這種麻煩并忽略實際的列表名稱,但這是一種不同的情況,其中字段名稱是未知的。我試過使用List<Map.Entry<String, PojoType1>>,List<Pair<String, PojoType1>>@JsonUnwrapped 似乎不適用于 HashMaps
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經(jīng)驗 獲得超5個贊

@JsonUnwrapped不適用于地圖,僅適用于具有 getter 和 setter 的適當(dāng) POJO。對于地圖,您應(yīng)該使用@JsonAnyGetterand?@JsonAnySetter(在 jackson 版本 >= 1.6 中可用)。

在你的情況下,試試這個:

@JsonAnySetter?

public void add(String key, String value) {

? ? map.put(key, value);

}


@JsonAnyGetter

public Map<String,String> getMap() {

? ? return map;

}

這樣,您也可以直接向地圖添加屬性,例如add('abc','xyz')將使用 value 添加新鍵abc到地圖xyz。

Jackson 項目目前有一個未解決的問題@JsonUnwrapped,以允許在地圖上提供支持。它沒有被標(biāo)記為即將推出的 Jackson 2.10 或 3.x 版本,因此它看起來不像是在近期功能路線圖上。

在支持此功能之前,使用@JsonAnySetter/的解決方法@JsonAnyGetter似乎是可行的方法。


查看完整回答
反對 回復(fù) 2023-05-10
  • 1 回答
  • 0 關(guān)注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號