杰克逊:无法反序列化START_OBJECT令牌中的Number实例

Lan*_*erX 4 java gwt serialization json jackson

我的GWT服务返回LinkedList<VisualData>.这是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下与场地相关的例外情况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"])
Run Code Online (Sandbox Code Playgroud)

当我换private Number value到时private Object value,我得到所有的吸气剂和制定者:

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)
Run Code Online (Sandbox Code Playgroud)

第二种情况很清楚,Object该类不可序列化.但为什么我会得到Can not deserialize instance of java.lang.Number out of START_OBJECT token

Per*_*ion 9

如果不为value字段提供其他类型信息,您将无法将数据反序列化到此对象中.这是因为Number该类是抽象的,无法实例化.更改字段Object将无济于事,因为该类上没有可写字段,杰克逊可以将数据反序列化.

你应该改变的领域是的具体实现的一个Number类(Integer,Long,Double等).