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

时间:2013-02-05 11:19:02

标签: json date grails converter

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

render myObject as JSON

输出如下:

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

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

我尝试在 Config.groovy 中设置属性grails.converters.json.dategrails.date.formats,但这不起作用。
我做错了什么或有其他方法吗?

由于

2 个答案:

答案 0 :(得分: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')
      ]
  }
}

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

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

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

现在,只要您执行address as JSON,就会获得您所描述的JSON,并且您的日期格式正确。我知道在JSON中格式化日期似乎有些过分,但这有很多其他好处。

答案 1 :(得分:5)

如果您想为所有日期类型使用默认的JSON编组器,您还可以使用非常简单的内容,如this SO answer中所示。 @ Gregg的答案对于单个域类更加灵活。