2011-04-10 13 views
5

उत्पन्न करता है मैंने स्प्रिंग के साथ एक शानदार वेब सेवा लागू की है। सेवा स्वीकृति शीर्षलेख के आधार पर एक्सएमएल या जेएसओएन में प्रतिक्रिया देती है।वसंत आरईएसटी | मैपिंग जैक्सन एचटीपी मैसेज कनवर्टर अवैध JSON

@Controller 
@RequestMapping(value = "/entityService") 
class RestfulEntityService { 

    @Resource 
    private EntityService entityService; 

    @ResponseBody 
    @RequestMapping(value = "/getAllEntities", method = RequestMethod.GET) 
    public List<Entity> getAllEntities() { 
    return entityService.getAllEntities(); 
    } 
} 

XML प्रतिक्रिया, मान्य है तथापि, जब क्लाइंट अनुप्रयोग/json को स्वीकार करें हैडर सेट, प्रतिक्रिया है:

<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"/> 
    <bean id="xmlMessageConverter" 
     class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> 
    <constructor-arg ref="xstreamMarshaller"/> 
    <property name="supportedMediaTypes" value="application/xml"/> 
    </bean> 

    <bean id="jsonHttpMessageConverter" 
     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
    <property name="prefixJson" value="false"/> 
    <property name="supportedMediaTypes" value="application/json"/> 
    </bean> 

    <bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <util:list id="beanList"> 
     <ref bean="xmlMessageConverter"/> 
     <ref bean="jsonHttpMessageConverter"/> 
     </util:list> 
    </property> 
    </bean> 

यहाँ मेरी नियंत्रक विधि है: यहाँ context.xml मानचित्रण है अवैध JSON।

[{"id":3,"attributes":[{"id":18,"attributeValue":null,"attributeName":"mobile","attributeType":"varchar(40)","entity":{"id":3,"attributes":[{"id":18,"attributeValue":null,"attributeName":"mobile","attributeType":"varchar(40)","entity":{"id":3,"attributes":[{"id":18,"attributeValue":null,"attributeName":"mobile","attributeType":"varchar(40)","entity":{"id":3,"attributes": ..... repeats for a while and then stops.. 
+0

एक पूर्ण वैध और पूर्ण अमान्य प्रतिक्रिया पोस्ट करने के लायक हो सकता है –

+0

अमान्य प्रतिक्रिया बहुत बड़ी है (इसलिए वैध प्रतिक्रिया है) क्योंकि इसे 100 इकाइयों की सूची क्रमबद्ध करना है। मैंने जो अमान्य प्रतिक्रिया पोस्ट की है वह सिर्फ सौ बार दोहराई जाती है और बंद हो जाती है .. – Sri

+0

दिलचस्प बात यह है कि एक या दो इकाइयों के साथ एक छोटी सूची जेएसओएन में क्रमबद्ध हो जाती है .. – Sri

उत्तर

11

आप XStream का उपयोग कर रहे एक्सएमएल प्रतिक्रियाओं को क्रमानुसार करने और Jackson JSON JSON प्रतिक्रियाओं को क्रमानुसार करने:

यहाँ JSON उत्तर नमूना है। आपके द्वारा पोस्ट किए गए JSON आउटपुट को देखते हुए, ऐसा लगता है कि हाथ में एक परिपत्र संदर्भ समस्या है। मुझे अनुमान है कि Entity में विशेषताओं की एक सूची है, प्रत्येक अपनी संबंधित इकाई को इंगित करता है। XStream XPath का उपयोग करके पारदर्शी संदर्भों को पारदर्शी रूप से संभालता है, यह वस्तुओं को वापस deserializing जब संदर्भों को संरक्षित करने की अनुमति देता है। जैक्सन v1.6 के बाद परिपत्र संदर्भों को संभालने में सक्षम है, लेकिन आपको @JsonManagedReference और @JsonBackReference के साथ अपनी धारावाहिक इकाइयों को एनोटेट करके इसकी सहायता करने की आवश्यकता है। मुझे लगता है कि जेएसओएन सीरियलाइजेशन में संदर्भों की अनुमति देने में जैक्सन अद्वितीय है।

संदर्भ के लिए handling bi-directional references using declarative methods पर जैक्सन के दस्तावेज़ देखें।

+0

वादा करता है .. मुझे कोशिश करने दो! – Sri

+0

एक आकर्षण की तरह काम करता है ..: धनुष: – Sri

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