我使用的是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)
解决此问题的最佳方法是什么?
感谢。
答案 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