2013-03-25 5 views
7

है मैं बाकी सेवा है जो एक परिणाम के रूप ExceptionEntity धारावाहिक वर्ग रिटर्न अगर कुछ गलत हो गया बना लिया है।Gson.fromJson() - फेंक अपवाद अगर प्रकार अलग

मैं कुछ अपवाद फेंक करना चाहते हैं तो json जो Gson.fromJson() द्वारा deserialized किया जाना चाहिए विभिन्न प्रकार में है। उदाहरण के लिए मैं इस स्ट्रिंग जो deserialized किया जाना चाहिए (my.ExceptionEntity.class) मिल गया है:

{"exceptionId":2,"message":"Room aaaa already exists."} 

लेकिन मैं इस धारावाहिक स्ट्रिंग के लिए प्रकार के रूप में Room वर्ग का उपयोग करें:

String json = "{\"exceptionId\":2,\"message\":\"Room aaaa already exists.\"}"; 
Room r = gson.fromJson(json, Room.class); 
// as a result r==null but I want to throw Exception; how? 

[संपादित करें] मैं इस परीक्षण किया है और यह काम नहीं करता:

try { 
    return g.fromJson(roomJson, new TypeToken<Room>(){}.getType()); 
    // this also doesn't work 
    // return g.fromJson(roomJson, Room.class); 
} catch (JsonSyntaxException e) { 
    pepuch.multiplayergame.entity.Exception ex = g.fromJson(roomJson, pepuch.multiplayergame.entity.Exception.class); 
    throw ExceptionController.toGameServerException(ex); 
} catch (JsonParseException e) { 
    pepuch.multiplayergame.entity.Exception ex = g.fromJson(roomJson, pepuch.multiplayergame.entity.Exception.class); 
    throw ExceptionController.toGameServerException(ex); 
} 
+0

के संभावित डुप्लिकेट के साथ प्रयास करना चाहिए एक कस्टम अपवाद प्रदान करना चाहते हैं (http://stackoverflow.com/questions/ [Gson गलत प्रकार पर अपवाद फेंक देना] 14,242 236/चलो-जीसन-फेंक-अपवाद-पर-गलत-प्रकार) –

उत्तर

9

GSonके अनुसार 210 एक अपवाद पहले से ही फेंक दिया जाता है, तो json स्ट्रीम प्रकार आपके द्वारा दी गई के अनुसार deserialized नहीं किया जा सकता:

फेंकता: JsonParseException - अगर json प्रकार classOfT का एक उद्देश्य के लिए एक वैध प्रतिनिधित्व नहीं है

लेकिन यह एक अनियंत्रित अपवाद नहीं है, अगर आप आप

try { 
    Room r = gson.fromJson(json, Room.class); 
} 
catch (JsonParseException e) { 
    throw new YourException(); 
} 
+0

मैंने अपना questiom संपादित किया है। मैंने इसका परीक्षण किया है और यह काम नहीं करता है। – pepuch

+0

आप 'रूम आर = जीसन.फॉमजसन (..) के साथ प्रयास कर सकते हैं; अगर (आर == नल) नया अपवाद फेंक दें (..); ' – Jack

+1

हाँ, आप सही हैं लेकिन यह गलत है:/दस्तावेज़ीकरण कहता है कि उन विधियों को 'जेसनपार्स अपवाद' फेंकना चाहिए लेकिन वे नहीं करते:/जैसा कि मुझे पता है' शून्य सत्यापन 'एक खराब पैटर्न है। – pepuch

संबंधित मुद्दे