2012-08-30 5 views
6

इस वर्ग के साथ:जावा "जैक्सन" JsonMappingException: FIELD_NAME से बाहर नाव के कहने deserialize नहीं कर सकते टोकन

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

    public float getPriority() { 
     return priority; 
    } 

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

जब ऐसी JSON डेटा का अक्रमांकन कर:

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

यह त्रुटि आई:

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

लेकिन इस डेटा के लिए (प्राथमिकता मूल्य के आसपास उद्धरण)

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

अच्छी तरह से काम करता है, तो ऐसा लगता है कि जैक्सन (1.9.9) संख्यात्मक मूल्यों का सम्मान नहीं करता है? मुझे संदेह है कि यहां कुछ गड़बड़ है।

+1

क्या आप सुनिश्चित हैं कि आपके प्राथमिकता क्षेत्र का 'लंबा' प्रकार आपके कोड उदाहरण में सही है? आप अपने गेटर और सेटर में 'फ्लोट' का उपयोग कर रहे हैं ... यदि वह कोड आपका वास्तविक कोड है, तो यह कारण हो सकता है। – Yhn

+0

हाँ, यह टाइपो था, धन्यवाद – Dfr

+0

मैं जैक्सन 1.9.9 का उपयोग करके इसे पुन: पेश नहीं कर सकता और ऊपर दिखाए गए POJO से स्ट्रिंग मान को पढ़ने/लिखने की कोशिश कर रहा हूं। जो मुझे लगता है कि वास्तविक त्रुटि आपके द्वारा जैक्सन को कॉल करने के तरीके के कारण हो सकती है। शायद यह हमें उस कोड को दिखाने में मदद करेगा :)। – Yhn

उत्तर

6

आप एक नाव प्रकार के रूप में क्षेत्र प्राथमिकता घोषित कर रहे हैं के साथ की जाँच कर सकते हैं और आप Json जो पूर्णांक मान deserialize की कोशिश करो। जैक्सन एक सेटर फ़ंक्शन को कॉल करने का प्रयास करता है जो एक पूर्णांक मान स्वीकार करता है। तो हमें इस तरह एक सेटटर जोड़ने की जरूरत है।

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

लगता है कि आपने लंबे समय तक प्राथमिकता घोषित की है और गेटर और सेटर विधियां फ्लोट का उपयोग कर रही हैं। आप

public long getPriority() { 
      return priority; 
     } 

     public void setPriority(long priority) { 
      this.priority = priority; 
     } 
संबंधित मुद्दे