2013-02-05 52 views
8

我在Grails的控制器已經一個方法應該返回一個JSON,將JSON的屬性是Date對象,但是當我做:如何設置日期格式JSON轉換器的Grails

render myObject as JSON 

輸出是這樣的:

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

有沒有辦法改變從轉換器使用的默認日期格式?

我試着在Config.groovy中設置屬性grails.converters.json.dategrails.date.formats,但這不起作用。
我做錯了什麼或有其他的方法嗎?

謝謝

回答

7

我通常使用自定義的Marshaller。假設你有以下域

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

創建在src類/ Groovy中這樣

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() } 

我這樣做的原因像這樣的數組是因爲我有多個marshallers。

現在,只要你做address as JSON,你就會得到你所描述的JSON,並且你的日期格式是正確的。我知道這在使用JSON格式化日期方面看起來過於誇張,但這有很多其他好處。

+0

我可以爲我的對象創建一個Marshaller ...在這種情況下,它不是一個矯枉過正的事情,因爲我可以隱藏它在創建的JSON中自動注入的_class_屬性。謝謝 – rascio

5

如果您想爲所有日期類型使用默認的JSON編組器,您還可以使用一些非常簡單的事物,如this SO answer中所示。 @ Gregg的答案對於單個域類更靈活。

+0

這是一個很好的提示。感謝分享! – Rafael