Jackson: cannot deserialize number instance from START_OBJECT token

My GWT service returns LinkedList<VisualData>

. This is what it looks like 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;
    }
}

      

I am getting the following excepion associated with a field 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"])

      

When I change private Number value

to private Object value

, all recipients and setters get:

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)

      

This second case is quite clear, the class is Object

not serializable. But why am I getting Can not deserialize instance of java.lang.Number out of START_OBJECT token

?

+3


source to share


1 answer


You cannot deserialize data into this object without providing additional type information for your field value

. This is because the class Number

is abstract and cannot be instantiated. Changing the field to Object

will not help, because there are no writable fields in this class that Jackson can deserialize the data.



You must change the field as one of the specific implementation class Number

( Integer

, Long

, Double

etc.).

+8


source







All Articles