2012-01-18 9 views
7

से स्प्रिंग रू या ग्रेल्स प्रोजेक्ट को कैसे स्विच करें यह एक अजीब सवाल जैसा प्रतीत हो सकता है, लेकिन मैं एक एप्लिकेशन को बदलने के लिए "सर्वोत्तम अभ्यास" क्या है, इस पर एक संभाल पाने की कोशिश कर रहा हूं आरयू या ग्रेल्स की पीढ़ी के नियंत्रकों (जो बुनियादी सीआरयूडी कार्यक्षमता प्रदान करता है) जैसे कुछ ऐसा करने के लिए स्थापित किया गया है जो जावास्क्रिप्ट एप्लिकेशन में उपयोग के लिए जेएसओएन प्रतिक्रिया निकाय देता है।सामान्य एमवीसी से एजेक्स/जेएसओएन/आरईएसटी

यहां तकनीक की अस्पष्टता इसलिए है क्योंकि मैंने अभी तक परियोजना शुरू नहीं की है। मैं अभी भी यह तय करने की कोशिश कर रहा हूं कि कौन सी (जावा-आधारित) तकनीक का उपयोग करना है, और यह देखने के लिए कि प्रक्रिया में मुझे किस प्रकार के उत्पादकता उपकरण सीखना चाहिए/उपयोग करना चाहिए। यह एक वेब अनुप्रयोग होगा, और यह डेटाबेस दृढ़ता परत का उपयोग करेगा। अन्य सभी विवरण हवा में हैं।

शायद मेरे लक्ष्य को पूरा करने का सबसे आसान तरीका है शुरू करने के लिए कुछ प्रकार के AJAX प्लगइन का उपयोग करना विकसित करना, लेकिन वहां के अधिकांश ट्यूटोरियल और विवरण सामान्य एमवीसी आर्किटेक्चर से शुरू करने के लिए कहते हैं। रू जेएसओएन-फ्रेंडली रिटर्न प्रकारों को उत्पन्न करने वाले नियंत्रकों का रूपांतरण करना मुश्किल लगता है, और मुझे यह जानने के लिए ग्रोवी/ग्रेल्स के साथ पर्याप्त परिचित नहीं है कि यह करने के लिए क्या करना है।

यह ज्यादातर मेरे लिए एक सीखने का अनुभव है, और मैं किसी भी आलोचना या सलाह के लिए खुला हूं, लेकिन एक प्रश्नोत्तर/मंच होने के नाते, मुझे एहसास है कि मुझे किसी प्रकार का एक उद्देश्य प्रश्न शामिल करने की आवश्यकता है। उस आवश्यकता को भरने के लिए, मैं पूछता हूं:

रू और/या Grails में मेरी संस्थाओं के लिए AJAX/RESTful इंटरफ़ेस स्थापित करने का सबसे अच्छा तरीका क्या है?

उत्तर

8

मैंने हाल ही में इसे Grails एप्लिकेशन के साथ किया है और यह उत्पन्न वार्तालापों को लेने के लिए आश्चर्यजनक रूप से आसान पाया है और उन्हें सामग्री बातचीत के आधार पर जेएसओएन या एक्सएमएल या एचटीएमएल को देखने के लिए मिलता है।

सामग्री वार्तालाप पर अनुभाग (ओं) में देखने के लिए Grails मैन्युअल में स्थान और यदि आपको JSON या XML इनपुट, मार्शलिंग से निपटने की आवश्यकता है।


डिफ़ॉल्ट list() विधि में JSON और एक्सएमएल उत्पादन प्राप्त करने के लिए, यह करने के लिए इसे बदल (मैं इस मामले में एक Session वस्तु है, ... मेरे डोमेन वर्गों में से एक):

def list() { 
    params.max = Math.min(params.max ? params.int('max') : 10, 100) 
    def response = [sessionInstanceList: Session.list(params), sessionInstanceTotal: Session.count()] 
    withFormat { 
     html response 
     json {render response as JSON} 
     xml {render response as XML} 
    } 
} 

कहीं भी आप डिफ़ॉल्ट रूप से केवल एक ऑब्जेक्ट लौट रहे हैं, तो आप withFormat ब्लॉक के साथ लौटाए गए मान को प्रतिस्थापित करना चाहेंगे।

आपको अपनी Config.groovy फ़ाइल को अपडेट करने की आवश्यकता हो सकती है जहां यह माइम प्रकारों से संबंधित है। यहाँ मैं क्या है:

grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format 
grails.mime.use.accept.header = true 
grails.mime.types = [ html: ['text/html','application/xhtml+xml'], 
         xml: ['text/xml', 'application/xml'], 
         text: 'text/plain', 
         js: 'text/javascript', 
         rss: 'application/rss+xml', 
         atom: 'application/atom+xml', 
         css: 'text/css', 
         csv: 'text/csv', 
         all: '*/*', 
         json: ['application/json','text/json'], 
         form: 'application/x-www-form-urlencoded', 
         multipartForm: 'multipart/form-data' 
        ] 

इनपुट के रूप में (एक update() या save() कार्रवाई करने के लिए, उदाहरण के लिए) JSON और एक्सएमएल पेलोड स्वचालित रूप से unmarshaled हो जाएगा और जैसे ही एक रूप इनपुट होगा बाध्य होंगे, लेकिन मैं पाया गया है कि unmarshaling प्रक्रिया थोड़ा picky है (विशेष रूप से जेएसओएन के साथ)।

मुझे पता चला कि JSON को update() विधि में सही तरीके से संभालने के लिए, class विशेषता को उपस्थित होना चाहिए और इनबाउंड JSON ऑब्जेक्ट पर सही होना चाहिए। चूंकि लाइब्रेरी का उपयोग मैं अपने क्लाइंट एप्लिकेशन में कर रहा था, इससे निपटने के लिए यह एक आसान मुद्दा नहीं बना, मैंने इसके बजाय एक्सएमएल का उपयोग करने के लिए स्विच किया।

+0

इस तरह के एक विस्तृत उत्तर के लिए धन्यवाद! यह वही चीज है जिसे मैं ढूंढ रहा था। – Andy

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