json - Java Jackson - prevent float to int conversion when deserializing -
मेरे पास निम्न संरचना के साथ एक JSON पेलोड है ...
{"age" : 12}
... जो निम्न वर्ग से मैप किया गया है:
सार्वजनिक वर्ग छात्र {निजी पूर्णांक आयु; सार्वजनिक पूर्णांक getAge () {वापसी उम्र;} सार्वजनिक शून्य setAge (पूर्णांक उम्र) {this.age = उम्र;}}
फिलहाल, उपयोगकर्ता के लिए एक नाव मूल्य प्रस्तुत करता है, तो आयु
, दशमलव को अनदेखा कर दिया जाता है और केवल पूर्णांक भाग स्वीकार किया जाता है। मैं क्या करना चाहता हूं उपयोगकर्ता को उम्र
के लिए एक फ्लोट मान के साथ एक पेलोड सबमिट करने से रोकता है (नीचे देखें) और एक अपवाद फेंकता है (फ़ील्ड 'उम्र के लिए अमान्य JSON मान' पंक्ति 8 पर) col 5 "- {उम्र": 12.7 // 12 छोटा कर दिया जाएगा} मानक संदेश है के रूप में अक्रमांकन में विफल रहता है जब)
। "
मैं संख्यात्मक मान के लिए एक कस्टम deserializer को लागू करने की सोच रहा था, लेकिन अगर वहाँ इस लक्ष्य को हासिल करने के लिए एक सरल तरीका है सोच रहा था।
< P> उस कोड का उपयोग करते हुए json ऑब्जेक्ट में json स्ट्रिंग को परिवर्तित करते समय
सेटर
विधि से बुलाया जाएगा, जहां आप मूल्य की जांच कर सकते हैं। सेटर विधि के हस्ताक्षर को देखो जो स्ट्रिंग
को पूर्णांक
के बजाय स्वीकार करता है। नमूना कोड:
क्लास छात्र { निजी अंतराल उम्र; सार्वजनिक int getAge () {वापसी उम्र; } सार्वजनिक शून्य सेटएज (स्ट्रिंग एजस्ट स्ट्रिंग) {System.out.println ("called"); कोशिश {age = पूर्णांक। पीआरआईआईएसआईएनटी (आयु स्ट्रिंग); } पकड़ (NumberFormatException ई) {नए अवैध निष्पादन अपवाद ("उम्र फ्लोट में नहीं हो सकता"); }}} ... कोशिश {छात्र छात्र = नया ऑब्जेक्ट मैपरपर ()। ReadValue ("{\" age \ ": 12.5}", छात्र.क्लस); } पकड़ (अवैध अभिलेख अपवाद ई) {e.printStackTrace (); }
Comments
Post a Comment