Grails 如何跳过特定约束的验证?

Grails 如何跳过特定约束的验证?,grails,Grails,假设我有以下Foo对象: Foo foo = new Foo(foo: "foo", bar: "bar", baz: "baz") 我知道如何验证特定约束: foo.validate(["foo", "bar"]) // validates the "foo" property and the "bar" property, but not the "baz" property 我也知道如何放弃验证: foo.save(validate: false) 但我不知道如何告诉Grails验证

假设我有以下
Foo
对象:

Foo foo = new Foo(foo: "foo", bar: "bar", baz: "baz")
我知道如何验证特定约束:

foo.validate(["foo", "bar"]) // validates the "foo" property and the "bar" property, but not the "baz" property
我也知道如何放弃验证:

foo.save(validate: false)
但我不知道如何告诉Grails验证所有约束,除了列表中的约束。我可以做一个我想要的方法,但我想确保没有一个Groovy的方法可以先做

更新

如果没有“更常规”的方法,我会这样做


您可以定义自定义映射,然后可以通过
exclude
参数从支持的命令类或
Config.groovy
中有效地过滤这些映射

考虑以下
Foo
域类

class Foo {
    String foo
    String bar
    String baz

    static constraints = {
        foo size: 4..7
        bar size: 4..7
        baz size: 4..7
    }
}
baz
的验证可以排除在外,如下所示:

Foo foo = new Foo(foo: "fool", bar: "bars", baz: "baz")

//Gather all fields
def allFields = foo.class.declaredFields
                         .collectMany{!it.synthetic ? [it.name] : []}
//Gather excluded fields
def excludedFields = ['baz'] //Add other fields if necessary

//All but excluded fields
def allButExcluded = allFields - excludedFields

assert foo.validate(allButExcluded)
assert foo.save(validate: false) //without validate: false, validation kicks in
assert !foo.errors.allErrors

没有直接的方法发送排除字段的列表进行验证。

答案有用吗?我实际上是在寻找一种“groovier”方法来实现这一点,所以我不确定这是否有用。如果不存在我期望使用的“groovier”方法,但看起来您的解决方案基本上也在做同样的事情。不幸的是,我唯一不想验证的字段是瞬态字段,并且没有包含在您答案中的
所有字段
列表中(虽然
瞬态
是,但这可能包括所有瞬态字段)。此外,解决方案中的
所有字段
列表中有很多多余的条目,即
约束
instanceControllersDomainBindingApi
$defaultDatabindingWhiteList
instanceDatabindingApi
错误
id
版本
日志
,以及
instanceConvertersApi
。我不清楚为什么所有这些条目都存在,以及为什么条目
瞬变
被替换为实际的瞬变字段。如果不存在更好的条目,我会用我将使用的方法更新我的问题。我想没有更好的方法可以做到这一点:(谢谢确认)。
Foo foo = new Foo(foo: "fool", bar: "bars", baz: "baz")

//Gather all fields
def allFields = foo.class.declaredFields
                         .collectMany{!it.synthetic ? [it.name] : []}
//Gather excluded fields
def excludedFields = ['baz'] //Add other fields if necessary

//All but excluded fields
def allButExcluded = allFields - excludedFields

assert foo.validate(allButExcluded)
assert foo.save(validate: false) //without validate: false, validation kicks in
assert !foo.errors.allErrors