2013-04-27 237 views
0

我正在开发一个带有REST风格的Web服务的GWT Web应用程序。 Web服务的结果是使用Jackson 1.8对POJO进行反序列化。它在简单的领域工作很好。但是,它尝试反序列化POJO列表时失败。这是列表中的POJO反序列化:JSON列表反序列化错误

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

    //getter/setters 
} 

这是一个包含列表

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

    //getter/setters 
} 

的JSON具有这种结构的POJO:当程序运行时

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

中, Web服务的结果工作正常,但反序列化打印此错误:

SEVERE:org.codeha us.jackson.map.JsonMappingException:无法将[java.util.ArrayList的实例反序列化为START_OBJECT标记 at [Source:[email protected]; (参考链: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,并且我使用Joshi的建议。它非常棒!谢谢!!

0

我遇到了一些类似的问题,并尝试了以下方法,它对我有用。

创建一个包含属性 〜公开名单ideologicoVox〜

而且使用此类引用作为属性的主类即〜DatosIndicadoresSVclaveDTO

+0

我已经创建了属性List listaIdeologicoVox的新类,并且我在DatosIndicadoresSVclaveDTO中包含了此引用,但没有工作:SEVERE:org.codehaus.jackson.map.JsonMappingException:无法反序列化组织实例.ull.etsii.client.dto.ListaIdeologicoVOXDTO out of START_ARRAY token at [Source:[email protected];行:1,列:583](通过参考链:org.ull.etsii.client.dto.DatosIndicadoresSVclaveDTO [“ideologicoVox”]) – 2013-04-27 11:27:22