假设我有一个具有User
属性的username
类,并且在该字段上定义了几个约束。
class User {
String username
static constraints = {
username blank: false, unique: true, email: true
}
}
如果我打电话
user.save()
然后,我可以通过
确定username
字段上的任何约束是否失败
user.errors['username'] != null
但有没有办法可以找出哪些约束失败?
答案 0 :(得分: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
答案 1 :(得分: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