2017-04-03 101 views
2

如果我對未知屬性禁用失敗:未能對未知屬性W /通知

new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

有沒有遇到未知屬性時得到通知的方式?這樣我可以輸出日誌消息?

回答

2

DeserializationProblemHandler類似乎做你想做的。

它可以讓你實現這個方法來處理未知屬性:

boolean handleUnknownProperty(DeserializationContext ctxt, 
     JsonParser jp, JsonDeserializer<?> deserializer, 
     Object beanOrClass, String propertyName) 

根據文檔:

方法調用時帶不認可 一個JSON地圖(「對象」)進入遇到名稱。

您可以使用DeserializationConfig.withHandler(DeserializationProblemHandler h)方法在您的DeserializationConfig對象上註冊自定義處理程序。

1

DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES的Javadoc說:

功能,可以確定是否未知屬性(那些沒有映射到一個屬性,以及遇到沒有「任何二傳手」或處理器可以處理它)應該導致失敗(通過拋出JsonMappingException)。

關鍵字這裏是「處理」,所以尋找處理程序,你會發現方法DeserializationConfig.withHandler(DeserializationProblemHandler h),並且DeserializationProblemHandler的javadoc說:

這是可以註冊的類(通過DeserializationConfig對象所有者通過ObjectMapper)在反序列化過程中遇到潛在可恢復問題時被調用。 處理程序可以嘗試解決問題,拋出異常或什麼都不做。

在你的情況下,你想記錄問題,然後「什麼都不做」。

所以,有點研究的javadoc提供了一個答案給你的問題。