Grails GORM日期数据绑定

时间:2014-01-07 16:33:27

标签: grails data-binding gorm grails-2.0

我使用的是Grails 2.3,我有一个带有日期字段的域名:

class DomainClass {
    String title
    Date datetime
} 

我有一个json以毫秒为单位进入RestfulController的时间戳:

{"title": "name", "datetime": 957044075522}

控制器正确绑定标题,但对于datetime字段,它实际上是一个错误:

Could not find matching constructor for: java.util.Date(com.google.gson.internal.LazilyParsedNumber)

解决此问题的最佳方法是什么?

感谢。

3 个答案:

答案 0 :(得分:2)

我会尝试使用@BindingFormat注释:

import org.grails.databinding.BindingFormat

class DomainClass {
    String title
    @BindingFormat('MMddyyyy')
    Date datetime
}

您需要将MMddyyyy替换为适合您的内容......

答案 1 :(得分:1)

我建议您不要在丢失时区信息时发送毫秒数。

如果这对您来说不是问题,并希望按原样继续,我建议您在控制器中使用命令对象将其解析为字符串,然后执行自定义绑定。

class DomainCmd {
   String title
   String datetime

   static constraints = {
       datetime matches: /[0-9]{12}/
   } 
}

然后在控制器中;

myControllerAction(DomainCmd cmd) {
   if (cmd.validate()) {
       def myDomain = new DomainClass(title: cmd.title, datetime: new Date(cmd.datetime))
       // 
   } else {
      // HTTP ERROR 
      response.status = 400
   }
}

(也考虑使用joda时间而不是java日期)

答案 2 :(得分:1)

Brain F和zoran119的答案都有道理,所以我把它们投票了。如果有人做同样的事情,这是有效的实际答案:

@BindUsing({ obj, source -> source['datetime']?.longValue() })
Date datetime