验证顺序

Order of validations

验证的执行顺序是否始终相同?它是如何排序的?

对于这些约束:

static constraints = {
   A ...
   B ...
   C ...
}

它们总是按照A -> B -> C的顺序执行吗?

为什么我需要它?

A 的验证中,我需要检查数据库是否存在标识符。如果不是,我将无法通过验证。 BC 取决于查找的值。

鉴于 Grails 本身不能保证顺序,并且可能会在版本之间更改,您对它的任何依赖充其量都是脆弱的。

这表明您处理问题的方式不正确。

鉴于您的字段 B 和 C 取决于 A 的情况,正确的解决方案是为 A 实施一个自定义验证器,该验证器考虑了所有三个。

像这样:

a(validator: { val, obj, errors ->
  if (!val ...) { 
    errors.rejectValue('a', 'whatever.problem')
    return
  }
  if (!obj.b ...) { 
    errors.rejectValue('b', 'some.other.problem')
    return
  }
  if (!obj.c ...) { 
    errors.rejectValue('c', 'another.problem')
    return
  }
})