2012-08-30 8 views
6

mit dieser Klasse deserialisiert:Java "Jackson" JsonMappingException: Kann nicht Instanz Schwimmer aus FIELD_NAME Token

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

    public float getPriority() { 
     return priority; 
    } 

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

Wenn Deserialisierung solcher JSON-Daten zu tun:

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

diesen Fehler Got:

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

Aber für diese Daten (in Anführungszeichen Wert Priorität)

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

funktioniert gut, so scheint es, dass jackson (1.9.9) numerische Werte nicht respektiert? Ich vermute, hier stimmt etwas nicht.

+1

Sie sind sicher, dass der "lange" Typ Ihres Prioritätsfelds in Ihrem Codebeispiel korrekt ist? Du verwendest 'float' in deinem Getter und Setter ... Wenn dieser Code dein tatsächlicher Code ist, könnte das der Grund sein. – Yhn

+0

ja, das war Tippfehler, danke – Dfr

+0

Ich kann nicht scheinen, reproduzieren es einfach mit jackson 1.9.9 und versuchen zu lesen/schreiben Sie einen String-Wert von einem POJO wie oben gezeigt. Was mich denken lässt, dass der tatsächliche Fehler durch die Art verursacht wird, wie Sie jackson anrufen. Vielleicht hilft es uns, diesen Code zu zeigen :). – Yhn

Antwort

6

Sie das Feld Priorität als Schwimmer-Typ deklarieren und Sie versuchen, die Json deserialisieren, die int-Wert enthält. Jackson versucht, eine Setter-Funktion aufzurufen, die einen Integer-Wert akzeptiert. Also müssen wir einen Setter wie diesen hinzufügen.

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

Scheint, dass Sie die Priorität als long deklariert haben und Getter- und Setter-Methoden Float verwenden. können Sie mit überprüfen

public long getPriority() { 
      return priority; 
     } 

     public void setPriority(long priority) { 
      this.priority = priority; 
     } 
Verwandte Themen