2012-03-12 19 views
6

क्रमबद्ध करने के लिए जीसन का उपयोग करें मैं जीएसओएन सीरियलाइज पीओजेओ का उपयोग करता हूं - ऑब्जेक्ट से पहले और बाद में ऑब्जेक्ट दोनों।पीओजेओ

बदले गए एक (इसे ए कॉल करें) जो Struts2 द्वारा सेट किया गया है आसानी से जेसन को क्रमबद्ध कर सकता है।

जबकि POJO को पहले से बदल दिया गया है जो iBatis के माध्यम से डेटाबेस से मिलता है (इसे बी कहते हैं) को क्रमबद्ध नहीं किया जा सका।

त्रुटि संदेश कहता है: एक प्रकार एडाप्टर पंजीकृत करने के लिए भूल गए?

मैंने जीसन एपीआई पढ़ा है। लेकिन मुझे नहीं लगता कि प्रत्येक पीओजेओ के लिए एक प्रकार का एडाप्टर पंजीकृत करना एक अच्छा विचार है। बी को धारावाहिक क्यों नहीं बनाया जा सकता है?

मैं अपने POJO के लिए क्लोन() लिखता हूं, और बी से क्लोन ऑब्जेक्ट भी किया जा सकता है।

यह भ्रमित है ... क्या कोई मुझे जवाब दे सकता है?

बदल से पहले (बी के क्लोन):

{"id":"6429B5329C544711A9848AF243D10E4E","idType":"未选择","firstDate":"Feb 29, 2012 12:00:00 AM","name":"testetes","gender":"男","phone":"553223","city":"未选择","ocup":"未选择","nation":"未选择","famStru":"未选择","infSouc":"未选择","creater":"EE4783A6272A4B62A5CC68DB3C11FE1E","createDate":"Feb 29, 2012 12:00:00 AM","purpose":"未选择","education":"未选择","income":"未选择","cars":"未选择","acptCarpRent":"未选择","acptCarpPrice":"未选择","handStand":"未选择","intentHouse":"未选择","intentArea":"未选择","intentLayout":"未选择","nextDate":"Mar 7, 2012 12:00:00 AM","wuyeType":"未选择","attentionPro":"958B9E093A84415B901900C2DA25C712","ordinaryTraffic":"未选择","attentionPoint":"未选择","buyDate":"未选择","cityArea":"未选择","lastUpdate":"Feb 29, 2012 12:00:00 AM","lastModifier":"EE4783A6272A4B62A5CC68DB3C11FE1E","saler":"A4FB4877DC2945E980477544A955B57F","state":"意向","status":"0"} 

बदल (ए) के बाद:

{"id":"6429B5329C544711A9848AF243D10E4E","idType":"未选择","firstDate":"Feb 29, 2012 12:00:00 AM","visitMode":"","name":"testetes","gender":"男","telPhone":"","phone":"553223","fax":"","adrs":"","postCode":"","email":"","workUnit":"","city":"未选择","media_id":"","ocup":"未选择","idNum":"","nation":"未选择","famStru":"未选择","infSouc":"未选择","createDate":"Feb 29, 2012 12:00:00 AM","idAdr":"","purpose":"未选择","education":"未选择","income":"未选择","cars":"未选择","acptCarpRent":"未选择","acptCarpPrice":"未选择","handStand":"未选择","intentHouse":"未选择","intentArea":"未选择","intentLayout":"未选择","customerDetail":"","wuyeType":"未选择","attentionPro":"958B9E093A84415B901900C2DA25C712","ordinaryTraffic":"未选择","attentionPoint":"未选择","buyDate":"未选择","cityArea":"未选择","lastUpdate":"Mar 11, 2012 2:58:04 PM","lastModifier":"00000000000000000000000000000000","saler":"A4FB4877DC2945E980477544A955B57F","state":"意向"} 
+0

कृपया दोनों जेएसओएन तारों के साथ-साथ दोनों मामलों में आउटपुट पोस्ट करें। –

+0

दोनों JSON स्ट्रिंग्स मान्य हैं, आपके द्वारा सामना किया गया त्रुटि संदेश क्या है, और किस लाइब्रेरी से? –

+0

पहली स्ट्रिंग को बक्लोन से क्रमबद्ध किया गया है। ** इसके दौरान कोई त्रुटि नहीं है। त्रुटि केवल तब होती है जब मैं POJO बी को क्रमबद्ध करने का प्रयास करता हूं। ** त्रुटि संदेश: _java.lang.UnsupportedOperationException: java.lang.Class को क्रमबद्ध करने का प्रयास किया गया: com.b5.customer.domain.Customer । एक प्रकार एडाप्टर पंजीकृत करने के लिए भूल गए? _ –

उत्तर

10

ऐसा लगता है अपने POJO की तरह प्रकार ग्राहक की है? जब आप अपनी ऑब्जेक्ट क्लोन करते हैं, तो आप एक नया ग्राहक बना रहे हैं, और जीसन बस ठीक कर सकते हैं। जब आप डीबी से वही ऑब्जेक्ट लेते हैं, हालांकि, यह मानक ग्राहक ऑब्जेक्ट नहीं है। इसके बजाए, यह एक उप-वर्ग है जिसमें वस्तु की कक्षा जैसे कुछ दृढ़ता की जानकारी शामिल है।

शायद सबसे आसान समाधान है Gson's @Expose एनोटेशन का उपयोग करना। यदि आप new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() के साथ अपना जीसन ऑब्जेक्ट बनाते हैं, तो आप उन प्रत्येक ग्राहक फ़ील्ड को चिह्नित कर सकते हैं जिन्हें आप @Expose के साथ क्रमबद्ध करना चाहते हैं। आपके दृढ़ता ढांचे के उप-वर्ग सहित किसी भी अन्य फ़ील्ड को क्रमबद्ध नहीं किया जाएगा।

+0

उत्कृष्ट जवाब! – Medo

2

ब्रैंडन सही था। यदि आप किसी भी एनोटेशन का उपयोग नहीं करना चाहते हैं या अपनी पीओजेओ कक्षा को संशोधित नहीं करना चाहते हैं तो यह एक और समाधान है। यह किसी भी अन्य लोगों के लिए मदद कर सकता है।

Type typeOfSrc = new TypeToken<A>() {}.getType(); //this helps for generic one. 
gson.toJson(obj, typeOfSrc); or gson.toJson(obj, A.class); 
संबंधित मुद्दे