2012-08-30 14 views
6

con esta clase:Java "Jackson" JsonMappingException: No se puede deserializar instancia de flotación de FIELD_NAME símbolo

public class Products implements Serializable { 
    private BigDecimal productId; 
    private float priority; 

    public float getPriority() { 
     return priority; 
    } 

    public void setPriority(float priority) { 
     this.priority = priority; 
    } 
} 

Al hacer deserialización de tales datos JSON:

{"productId":47552,"priority":78} 

dio este mensaje:

org.codehaus.jackson.map.JsonMappingException: 
Can not deserialize instance of float out of FIELD_NAME token 
at [Source: [email protected]; line: 1, \ 
column: 290] (through reference chain: entity.Products["priority"]) 

Pero para estos datos (las citas en torno al valor de prioridad)

{"productId":47552,"priority":"78"} 

funciona bien, por lo que parece que jackson (1.9.9) no respeta los valores numéricos? Sospecho que algo está mal aquí.

+1

¿Está seguro de que el campo 'long' de su campo de prioridad es correcto en el ejemplo del código? Estás usando 'float' en tu getter y setter ... Si ese código es tu código actual, podría ser la razón. – Yhn

+0

sí, eso fue un error tipográfico, gracias – Dfr

+0

Parece que no puedo reproducirlo simplemente usando jackson 1.9.9 y tratando de leer/escribir un valor de cadena de un POJO como se muestra arriba. Lo que me hace pensar que el error real podría ser causado por la forma en que llamas a jackson. Quizás ayude mostrarnos ese código :). – Yhn

Respuesta

6

Usted está declarando la prioridad de campo como un tipo de flotador y se intenta deserializar el JSON que contiene el valor int. Jackson intenta llamar a una función setter que acepta un valor entero. Entonces, necesitamos agregar un setter como este.

public void setPriority(int priority){ 
    this.priority = Float.valueOf(priority); 
} 
0

Parece que has declarado la prioridad, y los métodos getter y setter están usando float. que puede comprobar con

public long getPriority() { 
      return priority; 
     } 

     public void setPriority(long priority) { 
      this.priority = priority; 
     } 
Cuestiones relacionadas