2013-04-27 3 views
0

Я разрабатываю веб-приложение GWT с веб-службой RESTful. Результаты веб-службы десериализуются в POJO с помощью Jackson 1.8. Он отлично работает с простыми полями. Однако он не работает, когда пытается десериализовать список POJO. Это POJO со списком десериализовать:Ошибка в списке JSON deserialize

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class DatosIndicadoresSVclaveDTO implements Serializable { 
    ... 
    @XmlAttribute 
    @JsonDeserialize(contentAs = IdeologicoVOXDTO.class) 
    public List<IdeologicoVOXDTO> ideologicoVox; 
    ... 

    //getter/setters 
} 

И это POJO, который содержит список

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class IdeologicoVOXDTO implements Serializable { 
    @XmlAttribute 
    private Integer numeroPalabra; 
    @XmlAttribute 
    private String palabra; 
    @XmlAttribute 
    private Integer categoria; 
    ... 

    //getter/setters 
} 

JSON имеют такую ​​структуру:

{datosIndicadoresSVclave: { 
     ... 
     "ideologicoVox":[ 
      { 
       "categoria":"1", 
       "numeroPalabra":"1", 
       "palabra":"abandonado", 
       ... 
      }, 
      { 
       "categoria":"2", 
       "numeroPalabra":"3", 
       "palabra":"hambre", 
       ... 
      } 
     ], 
     ... 
    } 
} 

Когда он работает, результаты веб-сервиса прекрасно работают, но десериализуйте эту ошибку:

SEVERE: org.codeh aus.jackson.map.JsonMappingException: не удается десериализовать экземпляр java.util.ArrayList из токена START_OBJECT в [Источник: [email protected]; строка: 1, столбец: 580] (через цепочку ссылок: org.ull.etsii.client.dto.DatosIndicadoresSVclaveDTO ["ideologicoVox"]) at org.codehaus.jackson.map.JsonMappingException.from (JsonMappingException.java:163) в org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException (StdDeserializationContext.java:219) в org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException (StdDeserializationContext.java:212)

Любая идея ?? Благодаря!!

ответ

0

Я решил !!

Проблема в том, что список размеров является переменным, и он терпит неудачу, если он имеет один элемент. Версия Джексона 1,7, что он не может принимать одно значение массива. Мое решение - GSON с настраиваемым типом регистра, и я использовал советник Джоши. Он отлично работает! Благодаря!!

0

Я столкнулся с какой-то подобной проблемой и пробовал следующим образом, и это сработало для меня.

Создайте новый класс, который содержит свойство ~ общественного Список ideologicoVox ~

И использовать этот класс ссылку в собственности к основному классу т.е. ~ DatosIndicadoresSVclaveDTO

+0

Я создал новый класс со списком свойств listaIdeologicoVox, и я включил это refference в DatosIndicadoresSVclaveDTO, но не работал: SEVERE: org.codehaus.jackson.map.JsonMappingException: невозможно десериализовать экземпляр org .ull.etsii.client.dto.ListaIdeologicoVOXDTO из токена START_ARRAY в [Источник: [email protected]; строка: 1, столбец: 583] (через цепочку ссылок: org.ull.etsii.client.dto.DatosIndicadoresSVclaveDTO ["ideologicoVox"]) –