2011-03-21 10 views
8

का उत्पादन करने के लिए एक नियंत्रक को मजबूर करें यहां हमारे पास जेएसपी का उपयोग करके एक बुनियादी वेबैप है जिसे कुछ JSON आधारित आरईएसटी सेवा यूआरएल प्रदान करने की आवश्यकता है।स्प्रिंग एमवीसी - मैपिंग जैकसन जेसन व्यू (0)

ये यूआरएल /services के तहत रहेंगे और MyRestServicesController द्वारा उत्पन्न किए जाएंगे।

जेएसओएन आधारित विचारों को सेटिंग्स के लिए देखे जाने वाले उदाहरण सभी ContentNegotiatingViewResolver का उपयोग करते हैं। लेकिन ऐसा लगता है कि यह संकल्पक उन स्थितियों के लिए प्रतीत होता है जहां एक ही यूआरएल विभिन्न आउटपुट उत्पन्न कर सकता है।

मैं हमेशा MappingJacksonJsonView(s) का उत्पादन करने के लिए अपना एक RestServicesController चाहता हूं।

क्या नियंत्रक को ऐसा करने के लिए बस एक क्लीनर, अधिक सीधे आगे तरीका है?

+0

क्या आप विशेष रूप से 'मैपिंग जैक्सन जेसन व्यू' चाहते हैं, या आप बस जेएसओएन आउटपुट चाहते हैं? – skaffman

+0

जेएसओएन आउटपुट अंतिम लक्ष्य है, मानक वसंत घटकों का उपयोग करके एक सर्वोत्तम अभ्यास की तरह लगता है। जोहान ने इसे सिर पर मारा। –

उत्तर

12

क्या नियंत्रक को ऐसा करने के लिए बस एक क्लीनर, अधिक सीधे आगे तरीका है?

हां वहाँ है। आप Spring forums में पोस्ट किए गए इस नमूने को देख सकते हैं। संक्षेप में मैं इसे करना पसंद करता हूं, यह निम्नलिखित के माध्यम से है।

ApplicationContext:

<!-- json view, capable of converting any POJO to json format --> 
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/> 

नियंत्रक

@RequestMapping("/service") 
public ModelAndView getResultAsJson() { 
    Object jsonObj = // the java object which we want to convert to json 
    return new ModelAndView("jsonView", "result", jsonObj); 
} 

संपादित करें 2013: इन आधुनिक दिनों में, @ skaffman का दृष्टिकोण एक अच्छा विकल्प होगा।

+0

ओह ये, यह पूरी समझ में आता है, और यह बहुत आसान है। वास्तव में मैं क्या उम्मीद कर रहा था, और सुपर तेज प्रतिक्रिया। बहुत - बहुत धन्यवाद। मैंने बीननाम रिज़ॉल्वर के बारे में 5 बार पढ़ना होगा और इसे कभी भी इस्तेमाल करने के लिए क्लिक नहीं किया है, मुझे लगता है कि मेरा सिर अभी भी टेम्पलेट-भूमि में फंस गया था। –

9

यदि आपको केवल जेएसओएन आउटपुट करना है, तो दृश्य परत स्वयं अनावश्यक है। जैक्सन का उपयोग करके, स्प्रिंग को अपने मॉडल को सीधे क्रमबद्ध करने के लिए निर्देश देने के लिए आप use the @ResponseBody annotation कर सकते हैं। इसे MappingJacksonJsonView दृष्टिकोण से कम कॉन्फ़िगरेशन की आवश्यकता है, और कोड कम अव्यवस्थित है।

+1

+1 यह मेरे लिए काम करता है। क्या आप जानते हैं कि मैं सामग्री-प्रकार कैसे बदल सकता हूं? – stacker

+2

नियंत्रक रिटर्न के बाद @ResponseBody में एक कमी है, दृश्य तुरंत प्रस्तुत किया जाता है, जो HttpResponse को बंद करता है ताकि हेडर को जोड़ा जा सके (जैसे इंटरसेप्टर के पोस्ट हैंडल विधि के माध्यम से)। एक ContentNegotiatedViewResolver का उपयोग करने में यह समस्या नहीं है। – devdanke

3

जब तक आप mvc:annotation-driven का उपयोग कर रहे हैं और जैक्सन क्लासपाथ पर है तो आपको अपनी विधियों पर @ResponseBody का उपयोग करना होगा और वापसी प्रकार प्रति वसंत के मानक HTTP Message Conversion कार्यक्षमता के अनुसार JSON में परिवर्तित हो जाएगा।

इस वीडियो को लगभग 37:00: Mastering Spring MVC पर भी देखें।

+0

वीडियो लिंक के लिए धन्यवाद, इसे देख रहा है। – stivlo

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