3
我有一些bean,並且他們在JSon中明確地模擬了核心數據類型。然而,有時Jsons即時閱讀有額外的數據。Jackson:避免由於未建模字段造成的異常
有沒有一種方法在jackson中註釋/定義一個Bean,以便它爲某些字段(例如我所知的字段)使用顯式字段名稱,同時將額外的字段填充到map/list中?
我有一些bean,並且他們在JSon中明確地模擬了核心數據類型。然而,有時Jsons即時閱讀有額外的數據。Jackson:避免由於未建模字段造成的異常
有沒有一種方法在jackson中註釋/定義一個Bean,以便它爲某些字段(例如我所知的字段)使用顯式字段名稱,同時將額外的字段填充到map/list中?
是有,假設你確實要保留所有的額外/無法識別的參數,然後做這樣的事情:
public class MyBean {
private String field1;
private String field2;
private Integer field3;
private Map <String, Object> unknownParameters ;
public MyBean() {
super();
unknownParameters = new HashMap<String, Object>(16);
}
// Getters & Setters here
// Handle unknown deserialization parameters
@JsonAnySetter
protected void handleUnknown(String key, Object value) {
unknownParameters.put(key, value);
}
}
要配置的參數全局處理,你可以選擇定義的DeserializationProblemHandler實現並用ObjectMapper配置全局註冊它。
DeserializationProblemHandler handler = new MyDeserializationProblemHandler();
ObjectMapper.getDeserializationConfig().addHandler(handler);
如果你發現你真的不關心的未知參數,那麼你可以簡單地將其關閉。以@JsonIgnoreProperties(ignoreUnknown = true)爲基礎,或通過配置ObjectMapper在全局基礎上:
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)
謝謝 - 如果參數不是關鍵值parirs?也就是說,如果輸入是一個列表呢?我可以使用Object []作爲@JsonAnySetter方法的輸入參數嗎? – jayunit100 2012-01-17 09:31:04
任何nn-primitive都可以存儲爲鍵值對中的值。唯一需要注意的是,您必須知道在稍後從您的地圖中檢索時鍵的類型。 – Perception 2012-01-17 12:08:44
這是超級酷。 – rfinz 2014-01-23 17:41:42