2009-03-27 11 views
18

Grails में, आप नियंत्रक में यह करने के लिए JSON कन्वर्टर्स का उपयोग कर सकते हैं:Grails में JSON के रूप में विशिष्ट दिनांक प्रारूप कैसे वापस करें?

render Book.list() as JSON 

प्रस्तुत करना परिणाम

[ 
{"id":1, 
"class":"Book", 
"author":"Stephen King", 
"releaseDate":'2007-04-06T00:00:00', 
"title":"The Shining"} 
] 

आप द्वारा उत्पादन की तारीख को नियंत्रित कर सकते Config.groovy में एक सेटिंग बनाने के है

grails.converters.json.date = 'javascript' // default or Javascript 

तो परिणाम एक देशी जावास्क्रिप्ट तारीख

हो जाएगा
[ 
{"id":1, 
"class":"Book", 
"author":"Stephen King", 
"releaseDate":new Date(1194127343161), 
"title":"The Shining"} 
] 

मैं इस तरह एक विशिष्ट तिथि प्रारूप प्राप्त करना चाहते हैं: जो लिखने का बहुत सा की आवश्यकता है

"releaseDate":"06-04-2007" 

मैं उपयोग करने के लिए 'कलेक्ट' है,:

return Book.list().collect(){ 
    [ 
     id:it.id, 
     class:it.class, 
     author:it.author, 
     releaseDate:new java.text.SimpleDateFormat("dd-MM-yyyy").format(it.releaseDate), 
     title:it.title 
    ] 
} as JSON 

वहाँ एक सरल है ऐसा करने का तरीका?

उत्तर

35

एक आसान समाधान है: चूंकि Grails 1.1 कनवर्टर्स को अधिक मॉड्यूलर के रूप में लिखा गया है। दुर्भाग्य से मैंने इसके लिए प्रलेखन पूरा नहीं किया। यह अब ऑब्जेक्टमार्शर्स (सरल पोगो/पोजो 'को पंजीकृत करने की अनुमति देता है जो org.codehaus.groovy.grails.web.converters.marshaller.ObjectMarshaller इंटरफेस को कार्यान्वित करता है)।

अपने वांछित उत्पादन प्राप्त करने के लिए, आपको लगता है कि जिस तरह से BootStrap.groovy में इस तरह के एक ObjectMarshaller रजिस्टर कर सकते हैं:

import grails.converters.JSON; 

class BootStrap { 

    def init = { servletContext -> 
     JSON.registerObjectMarshaller(Date) { 
      return it?.format("dd-MM-yyyy") 
     } 
    } 
    def destroy = { 
    } 
} 

वहाँ कन्वर्टर्स के उत्पादन में अनुकूलित करने के लिए कई अन्य तरीके हैं और मैं अपना सर्वश्रेष्ठ करना करूँगा प्रलेखन Asap के साथ पकड़ो।

+0

यह शानदार है – tbruyelle

1

या आप तिथि स्तर पर ही काम कर सकते हैं। यह वही नहीं हो सकता है जो आप चाहते हैं लेकिन यह एक समाधान के लिए एक विचार पैदा कर सकता है जो आपके पूरे ऐप में लगातार काम करेगा।

def doWithDynamicMethods = {ctx -> 

    def customDateToString = {-> 
     def dateFormat = "dd MMM yyyy" 
     def timeFormat = "hh:mm:ss a" 

     def timeCheck = new java.text.SimpleDateFormat("hh:mm:ss SSS a") 
     def formattedTime = timeCheck.format(delegate) 
     def formatString = dateFormat 
     if (formattedTime != "12:00:00 000 AM") 
           formatString = "$formatString $timeFormat" 
     def formatter = new java.text.SimpleDateFormat("$formatString") 
     formatter.format(delegate) 
    } 

    Date.metaClass.toString = customDateToString; 
    java.sql.Timestamp.metaClass.toString = customDateToString; 
} 
+0

टॉस्ट्रिंग विधि को तब नहीं कहा जाता है जब दिनांक/टाइमस्टैम्प उदाहरण को उसके JSON प्रस्तुति में परिवर्तित किया जाता है। चीयर्स –

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