8

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

render myObject as JSON

输出是这样的:

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

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

我尝试在Config.groovygrails.converters.json.date中设置属性,但这不起作用。 我做错了什么还是有其他方法可以做到这一点? grails.date.formats

谢谢

4

2 回答 2

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

我这样做的原因是因为我有多个编组器。

现在,无论何时address as JSON,您都会得到您所描述的 JSON,并且您的日期格式是正确的。我知道这对于在 JSON 中格式化日期似乎有点矫枉过正,但这还有很多其他好处。

于 2013-02-05T14:25:57.817 回答
5

如果您想要所有 Date 类型的默认 JSON 编组器,您还可以使用一些非常简单的东西,如这个 SO answer中所示。@Gregg 的答案对于单个域类要灵活得多。

于 2013-02-14T00:38:55.707 回答