Grails

2013-02-05 51 views
8

में JSON कनवर्टर के लिए दिनांक स्वरूप सेट करने के लिए मैं अपने Grails नियंत्रक में एक विधि है कि एक JSON लौटना चाहिए, JSON की संपत्ति एक दिनांक वस्तु है, लेकिन मुझे क्या करना है जब:Grails

render myObject as JSON 

आउटपुट इस तरह है:

{ 
    "dateProperty": "2010-12-31T23:00:00Z", 
    "otherProperty" : "aValue..." 
} 

कनवर्टर से उपयोग किए गए डिफ़ॉल्ट दिनांक प्रारूप को बदलने का कोई तरीका है?

मैं Config.groovy में संपत्ति grails.converters.json.date स्थापित करने के लिए कोशिश की है और यह भी grails.date.formats, लेकिन यह काम नहीं करता।
क्या मैं कुछ गलत कर रहा हूं या ऐसा करने का कोई और तरीका है?

धन्यवाद

उत्तर

7

मैं आमतौर पर एक कस्टम मार्शलर का उपयोग करता हूं। मान लें आप निम्नलिखित डोमेन

class Address { 
    String addressOne 
    String city 
    //bla bla 
    Date dateCreated 
} 

src के तहत एक वर्ग/ग्रूवी इस

class AddressMarshaller { 
    void register() { 
    JSON.registerObjectMarshaller(Address) { Address address -> 
     return [ 
     id: address.id, 
     addressOne: address.addressOne, 
     city: address.city, 
     dateCreated: address.dateCreated.format('yyyy-MM-dd') 
     ] 
    } 
} 

की तरह बनाएं फिर अपने बूटस्ट्रैप फ़ाइल में निम्न है:

[ new AddressMarshaller() ].each { it.register() } 

कारण मैं यह कर जैसा कि एक सरणी है क्योंकि मेरे पास कई मार्शलर हैं।

अब, जब भी आप address as JSON करते हैं, तो आपको जेएसओएन मिलेगा जिसे आपने वर्णित किया है और आप सही दिनांक प्रारूप हैं। मुझे पता है कि यह जेएसओएन में एक तिथि स्वरूपण के लिए ओवरकिल जैसा लगता है लेकिन इसमें कई अन्य लाभ हैं।

+0

मैं अपने ऑब्जेक्ट के लिए मार्शलर बना सकता हूं ... इस मामले में यह एक ओवरकिल नहीं है, 'इसके कारण मैं _class_ प्रॉपर्टी को छुपा सकता हूं जो इसे जेएसओएन में स्वचालित रूप से इंजेक्ट करता है। धन्यवाद – rascio

5

यदि आप सभी दिनांक प्रकारों के लिए डिफ़ॉल्ट JSON marshaller चाहते हैं तो आप this SO answer में दिखाए गए कुछ सरल का भी उपयोग कर सकते हैं। @ ग्रेग का जवाब अलग-अलग डोमेन वर्गों के लिए बहुत अधिक लचीला है।

+0

यह एक उत्कृष्ट सुझाव है। साझा करने के लिए धन्यवाद! – Rafael