【问题标题】:How to set date format for JSON converter in Grails如何在 Grails 中为 JSON 转换器设置日期格式
【发布时间】:2013-01-20 07:21:42
【问题描述】:

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

render myObject as JSON

输出是这样的:

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

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

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

谢谢

【问题讨论】:

    标签: json date grails converter


    【解决方案1】:

    我通常使用自定义 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 中格式化日期似乎有点过头了,但这还有很多其他好处。

    【讨论】:

    • 我可以为我的对象创建一个 Marshaller...在这种情况下,这并不是一个矫枉过正的做法,因为我可以隐藏它自动注入的 class 属性在创建的 JSON 中。谢谢
    • 你能只为 Address 的一个属性创建编组器吗?其余的保持默认?
    【解决方案2】:

    如果您想要所有日期类型的默认 JSON 编组器,您还可以使用非常简单的方法,如 this SO answer 中所示。 @Gregg 的回答对于单个域类来说要灵活得多。

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多