2012-08-30 14 views
6

con questa classe:Java "Jackson" JsonMappingException: Impossibile deserializzare istanza di galleggiante fuori FIELD_NAME gettone

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

    public float getPriority() { 
     return priority; 
    } 

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

Nel fare la deserializzazione di tali dati JSON:

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

ottenuto questo errore:

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"]) 

Ma per questi dati (virgolette attorno al valore di priorità)

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

funziona bene, quindi sembra che jackson (1.9.9) non rispetti i valori numerici? Sospetto che qui qualcosa non funzioni.

+1

Sei sicuro che il tipo "long" del tuo campo di priorità è corretto nell'esempio di codice? Stai usando 'float' nel tuo getter and setter ... Se quel codice è il tuo codice reale, potrebbe essere la ragione. – Yhn

+0

sì, è stato un errore di battitura, grazie – Dfr

+0

Non riesco a riprodurlo semplicemente usando jackson 1.9.9 e provando a leggere/scrivere un valore di stringa da un POJO come mostrato sopra. Il che mi fa pensare che l'errore effettivo potrebbe essere causato dal modo in cui chiami Jackson. Forse ti aiuterà a mostrarci quel codice :). – Yhn

risposta

6

si dichiara la priorità campo come un tipo float e si tenta di deserializzare il JSON, che contiene il valore int. Jackson prova a chiamare una funzione setter che accetta un valore intero. Quindi dobbiamo aggiungere un setter come questo.

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

Sembra che tu abbia dichiarato la priorità, mentre i metodi getter e setter utilizzano float. si può verificare con

public long getPriority() { 
      return priority; 
     } 

     public void setPriority(long priority) { 
      this.priority = priority; 
     } 
Problemi correlati