2014-01-22 44 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,编写这样的分析器为他们每一个有点乏味,必须有一些通用的解决方案,我希望即使是一些非常简单的喜欢某处设置了旗帜,我找不到它。 –