我有Grails 3.1.2应用程序
我的 Realm 类(class)之一是目标
import java.time.LocalDateTime
import java.time.temporal.ChronoUnit
class Goal {
String name
String description
LocalDateTime targetDate
Date dateCreated
Date lastUpdated
static constraints = {
name(nullable: false, blank: false)
}
}
当我在目标实例上调用validate时,我得到:
如何更改验证,使其不需要此构造函数?
最佳答案
您不能,但是验证并不是真正的问题。数据绑定(bind)器是问题所在。默认的资料夹尚未内置对LocalDateTime
的支持。
您可以这样注册自己的转换器:
转换器:
// src/main/groovy/demo/MyDateTimeConverter.groovy
package demo
import grails.databinding.converters.ValueConverter
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
class MyDateTimeConverter implements ValueConverter {
@Override
boolean canConvert(Object value) {
value instanceof String
}
@Override
Object convert(Object value) {
def fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
LocalDateTime.parse(value, fmt)
}
@Override
Class<?> getTargetType() {
LocalDateTime
}
}
将其注册为bean:
// grails-app/conf/spring/resources.groovy
beans = {
myConverter demo.MyDateTimeConverter
}