2014-01-22 1 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 объектов в вашей модели, написать такой синтаксический анализатор для каждого из них немного утомительно, должно быть какое-то общее решение, я бы ожидал даже некоторых действительно простых где-то установлен флаг, я просто не могу его найти. –

Смежные вопросы