2014-01-22 113 views
0

傑克遜使用的版本:2.3.0傑克遜錯誤處理

我有下面的代碼

 try { 
      ObjectMapper mapper = new ObjectMapper(); 
      MenuItem[] menuItems = mapper.readValue(result, MenuItem.class); 
      return menuItems; 
     } 
     catch (Exception e) { 
      Log.error("Exception while parsing json", e); 
     } 

POJO

public class MenuItem { 
    public String dataUrl; 
} 

JSON

[{ 
      "dataUrl": "" 
     }, 
     { 
      "dataUrl": [] 
     }] 

這是真的簡化的示例牢記我對json具有零控制權。上面的json不解析,很可能是String解串器無法處理數組,至少這是非常合乎邏輯的。

繼expcetion發生:com.fasterxml.jackson.databind.JsonMappingException:無法反序列化java.lang.String中的實例出START_ARRAY令牌

的問題是如何實現的,在一個項目的問題發生過什麼在json中(如果json是有效的),它只是跳過一個項目,但解析其他項目。現在任何問題都只會導致不解析任何東西。我知道註釋會忽略未知屬性,但是可能會發生不同問題,並且在我的情況下會發生,並且最終導致出現空白頁面而不是缺少5%內容的頁面。

回答

0

您可以嘗試寫自己的解串器類,將只處理數據,如果它是文本類型的象下面這樣:

public class MenuItemDeserializer { 
@Override 
public MenuItem deserialize(JsonParser jsonParser, 
          DeserializationContext ctxt) throws IOException { 
    try { 
     jsonParser.nextToken(); 
     String dataUrl = jsonParser.getText(); 
     […] 

     MenuItem menuItem = new MenuItem(dataUrl); 
     return menuItem; 
    } catch (JsonParseException jpe) { 
     [...] 
    } 
} 

} 

這是一個自定義的嘗試,因爲我還沒有與傑克遜,因爲很長一段時間的工作我可能已經忘記了一些準則,所以希望它有幫助。 BR。

+0

謝謝,這可能會工作,但如果你有你的模型中的對象hundrets,編寫這樣的分析器爲他們每一個有點乏味,必須有一些通用的解決方案,我希望即使是一些非常簡單的喜歡某處設置了旗幟,我找不到它。 –