如何在Grails中设置JSON转换器的日期格式

ras*_*cio 8 grails json date converter

我在我的Grails控制器中有一个方法应该返回一个JSON,JSON的一个属性是一个Date对象,但是当我这样做时:

render myObject as JSON
Run Code Online (Sandbox Code Playgroud)

输出如下:

{
    "dateProperty": "2010-12-31T23:00:00Z",
    "otherProperty" : "aValue..."
}
Run Code Online (Sandbox Code Playgroud)

有没有办法更改转换器使用的默认日期格式?

我试图设置属性grails.converters.json.date,并grails.date.formatsConfig.groovy中,但这行不通.
我做错了什么或有其他方法吗?

谢谢

Gre*_*egg 7

我通常使用自定义Marshaller.假设您有以下域

class Address { 
  String addressOne
  String city
  //bla bla
  Date dateCreated
}
Run Code Online (Sandbox Code Playgroud)

像这样在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')
      ]
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的Bootstrap文件中执行以下操作:

[ new AddressMarshaller() ].each { it.register() }
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是因为我有多个marshallers.

现在,只要你这样做address as JSON,你就会得到你所描述的JSON,而且你的日期格式是正确的.我知道在JSON中格式化日期似乎有些过分,但这有很多其他好处.


Jef*_*ith 5

如果你想为所有日期类型使用默认的JSON编组器,你也可以使用非常简单的东西,如本答案中所示.@ Gregg的答案对于单个域类更加灵活.