0

假设我有一个具有属性的User类,username并且在该字段上定义了几个约束。

class User {
    String username

    static constraints = {
        username blank: false, unique: true, email: true
    }
}

如果我打电话

user.save()

然后我可以通过以下方式确定该字段上的任何约束是否username失败

user.errors['username'] != null

但是有没有办法可以找出哪些约束失败了?

4

2 回答 2

2

该值user.errors['username'].codes将包含许多用于在 中查找验证消息的键messages.properties。您可以使用这些来确定哪些约束被破坏。

例如,user.errors['username'].codes[-1]将包含键的约束部分messages.properties

assert user.errors['username'].codes[-1] == 'blank' // if blank constraint fails
assert user.errors['username'].codes[-1] == 'unique' // if unique constraint fails
于 2012-04-16T20:36:21.233 回答
2

是的,您可以使用code错误对象上的属性检查错误代码:

def user = new User(email: '')
user.validate()
assert user.errors['email'].code == 'blank'

user.email = 'asdasd'
user.validate()
assert user.errors['email'].code == 'email.invalid'

如果您在一个属性中可能有多个错误,我发现获取该属性的所有错误的唯一方法是迭代该allErrors属性:

class Foo {
    String bar, baz
    static constraints = {
        bar blank: false
        baz email: true, notEqual: 'foobar'
    }
}

def foo = new Foo(bar: '', baz: 'foobar')
foo.validate()
foo.errors.allErrors.each {
    println "$it.field: $it.code"
}

应该输出如下内容:

bar: blank
baz: notEqual
baz: email.invalid
于 2012-04-16T21:16:55.020 回答