默认情况下修剪域字段

时间:2014-05-02 14:59:00

标签: grails groovy

修剪域中字段值的最佳方法是什么?

我的建议是使用beforeSave(),但是可以这样做吗?

class Book {

  String name = name?.trim()

}

4 个答案:

答案 0 :(得分:3)

根据您的行为,您有几个选择。

  1. 自定义设置器,每次设置时都会修剪值

    class Book {
        String name
    
        void setName(String name) {
            this.name = name?.trim()
        }
    }
    
  2. 自定义getter,它会为您提供一个修剪后的值,但不会将其存储在数据库中

    class Book {
        String name
    
        String getName() {
            this.@name?.trim()
        }
    }
    
  3. 一个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

我知道这太过分了,但是将其添加到域类中既快捷又容易。