6

में ऑब्जेक्ट बनाने के लिए JSON का उपयोग करना मेरे पास एक ग्रोवी/ग्रेइल्स वेबसाइट है जिसका उपयोग JSON के माध्यम से एंड्रॉइड क्लाइंट को डेटा भेजने के लिए किया जा रहा है। मैंने एंड्रॉइड क्लाइंट और ग्रोवी/ग्रेल्स दोनों वेबसाइट बनाई हैं; और वे जेएसओएन में एक ही ऑब्जेक्ट्स आउटपुट कर सकते हैं।ग्रोवी/Grails

मैं जावा ऑब्जेक्ट्स पर जेएसओएन आउटपुट मैप करके एंड्रॉइड में संबंधित ऑब्जेक्ट्स सफलतापूर्वक बना सकता हूं, हालांकि मैं सोच रहा था कि जेरोवी आउटपुट का उपयोग ग्रोवी/ग्रेल्स में एक नया डोमेन ऑब्जेक्ट बनाने के लिए करना संभव है? क्या JSON आउटपुट को नियंत्रक क्रिया में पास करने का कोई तरीका है ताकि ऑब्जेक्ट बनाया जा सके?

यहां जेएसओएन का एक उदाहरण है जिसे मैं भेजना चाहता हूं;

{ 
    "class":"org.icc.callrz.BusinessCard.BusinessCard", 
    "id":1, 
    "businessCardDesigns":[], 
    "emailAddrs":[ 
    { 
     "class":"org.icc.callrz.BusinessCard.EmailAddress", 
     "id":1, 
     "address":"[email protected]", 
     "businessCard":{ 
      "_ref":"../..", 
      "class":"org.icc.callrz.BusinessCard.BusinessCard" 
     }, 
     "index":0, 
     "type":{ 
      "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType", 
      "name":"H" 
     } 
    }, 
    { 
     "class":"org.icc.callrz.BusinessCard.EmailAddress", 
     "id":2, 
     "address":"[email protected]", 
     "businessCard":{ 
      "_ref":"../..", 
      "class":"org.icc.callrz.BusinessCard.BusinessCard" 
     }, 
     "index":1, 
     "type":{ 
      "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType", 
      "name":"W" 
     } 
    } 
    ] 
} 

"वर्ग" डोमेन मैं करने के लिए बचाने के लिए चाहते हैं, उनके मेल खाता है, आईडी डोमेन की आईडी, तो businessCardDesigns के भीतर प्रत्येक मद है और emailAddrs (समान तरीकों का उपयोग कर बचाया जा करने की जरूरत है में डोमेन व्यवसाय करें कार्ड डिज़ाइन और ईमेल एड्रेसलिस्ट हैं)। अग्रिम में बहुत धन्यवाद!

समाधान:

@RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json") 
public ResponseEntity<String> createFromJson(@RequestBody String json) { 
    Owner.fromJsonToOwner(json).persist(); 
    return new ResponseEntity<String>(HttpStatus.CREATED); 
} 

उत्तर

6

मैं जानता हूँ कि आप पहले से ही एक जवाब स्वीकार किए जाते हैं लेकिन अगर मैं आपके सवाल का सही पढ़ रहा हूँ, वहाँ में एक निर्मित ऐसा करने के लिए "Grails" तरीका।

URLMappings.groovy में अपनी कार्रवाई के लिए एक प्रविष्टि बनाएं और अनुरोध पार्सिंग चालू करें। उदाहरण के लिए, मैं बहुत तरह RESTful मैपिंग बनाएँ:

"/api/bizCard/save"(controller: "businessCard", parseRequest: true) { 
    action = [POST: "save"] 
} 

और फिर आप में नियंत्रक

def save = { 
    def businessCardInstance = new BusinessCard(params.businessCard) 
    .... 
    businessCardInstance.save(flush:true) 
} 
+0

ऐसा लगता है कि यह बहुत उपयोगी साबित हो सकता है; योगदान के लिए धन्यवाद। मैं सोमवार को इसे आजमाउंगा। :) – krslynx

12

का उपयोग में निर्मित Grails JSON कनवर्टर अन्य उत्तर की तुलना में इस आसान बना देता है, मेरी राय में:

import grails.converters.JSON 

class PersonController { 
    def save = { 
     def person = new Person(JSON.parse(params.person)) 
     person.save(flush:true) 
    } 
} 

अन्य लाभ हैं:

  • किसी भी config फ़ाइलों
  • जिसके परिणामस्वरूप JSON ऑब्जेक्ट, यदि आवश्यक हो, हेरफेर किया जा सकता बताए गुण
  • यह कोड क्या हो रहा है (हम एक JSON ऑब्जेक्ट और सेटिंग को पार्स कर रहे हैं में अब तक स्पष्ट करने से पहले में चारों ओर गंदगी के लिए कोई ज़रूरत नहीं है व्यक्ति इकाई पर गुण)
+1

फिक्स्ड आयात पथ: आयात grails.converters.JSON –

+1

उस टाइपो को पकड़ने के लिए धन्यवाद। – OverZealous

+0

@OverZealous - वास्तव में जो मैं खोज रहा था। धन्यवाद। – mtyson

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

  • कोई संबंधित समस्या नहीं^_^