修剪域中字段值的最佳方法是什么?
我的建议是使用beforeSave()
,但是可以这样做吗?
class Book {
String name = name?.trim()
}
答案 0 :(得分:3)
根据您的行为,您有几个选择。
自定义设置器,每次设置时都会修剪值
class Book {
String name
void setName(String name) {
this.name = name?.trim()
}
}
自定义getter,它会为您提供一个修剪后的值,但不会将其存储在数据库中
class Book {
String name
String getName() {
this.@name?.trim()
}
}
一个hibernate事件,如你所提到的beforeSave()
,它只会在对象被持久化之前修剪它。
答案 1 :(得分:2)
好吧,您可以通过在Config.groovy
文件中设置以下属性来启用Grails(版本2.3+)中字符串的自动修剪:
grails.databinding.trimStrings = true
这将在保存或更新之前自动修剪字符串。
答案 2 :(得分:1)
我注意到Grails会自动在字段上执行.trim(),然后再保留它们。例如:
null
""
" "
对于可以为空的字符串,所有在Grails 2.3.7中都存储为null。另外:
" foobar "
存储为" foobar"
这些结果使用默认的h2数据库。因此,在这种情况下,你可能会让Grails做繁重的工作。
答案 3 :(得分:1)
这是我的技巧,可以快速修剪域对象中的所有字段。我经常收到未以允许我使用数据绑定技术的方式格式化的JSON数据。在更新或分配域实例中的所有值之后,可以调用此方法。
class Book {
def trimFields() {
this.properties = this.properties
}
}
需要此配置,该配置在Grails中默认设置
grails.databinding.trimStrings = true
我知道这太过分了,但是将其添加到域类中既快捷又容易。