我的Grails控制器中有一个方法应该返回一个JSON,JSON的一个属性是一个Date对象,但是当我这样做时:
render myObject as JSON
输出如下:
{
"dateProperty": "2010-12-31T23:00:00Z",
"otherProperty" : "aValue..."
}
有没有办法更改转换器使用的默认日期格式?
我尝试在 Config.groovy 中设置属性grails.converters.json.date
和grails.date.formats
,但这不起作用。
我做错了什么或有其他方法吗?
由于
答案 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的答案对于单个域类更加灵活。