jackson:无法反序列化START_OBJECT令牌中的Number实例
我的GWT服务返回LinkedList
。 这是VisualData
外观:
import javax.xml.bind.annotation.XmlRootElement; import com.google.gwt.user.client.rpc.IsSerializable; @XmlRootElement public class VisualData implements IsSerializable { private Number value; private long timestamp; public VisualData() { } public VisualData(Number value, long timestamp) { this.value = value; this.timestamp = timestamp; } public long getTimestamp() { return timestamp; } public Number getValue() { return value; } public void setTimestamp(long timestamp) { this.timestamp = timestamp; } public void setValue(Number value) { this.value = value; } }
我得到以下例外与字段private Number value
。
SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.Number out of START_OBJECT token at [Source: org.apache.catalina.connector.CoyoteInputStream@a0eb51; line: 1, column: 29] (through reference chain: org.jage.charts.client.VisualData["value"])
当我将private Number value
更改为private Object value
,我得到所有getter和setter:
SEVERE: WebModule[/AgECharts]Exception while dispatching incoming RPC call com.google.gwt.user.client.rpc.SerializationException: Type 'org.jage.charts.client.VisualData' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = Value:{@type=xs:int, $=6}, timestamp:1360240281439 at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)
第二种情况很清楚, Object
类不可序列化。 但是为什么我Can not deserialize instance of java.lang.Number out of START_OBJECT token
?
如果不为value
字段提供其他类型信息,则无法将数据反序列化到此对象中。 这是因为Number
类是抽象的,无法实例化。 将字段更改为Object
将无济于事,因为该类上没有可写字段,Jackson可以将数据反序列化。
您应该将该字段更改为Number
类( Integer
, Long
, Double
等)的具体实现之一。