向Groovy类(不是Grails域类)的属性添加约束

向Groovy类(不是Grails域类)的属性添加约束,groovy,constraints,maxlength,Groovy,Constraints,Maxlength,我们如何向Groovy类的属性添加一些公共约束(即maxLength、nullable)?我知道我们可以在Grails域类上实现这一点,但如果这是Groovy类(我将它用作Grails项目的DTO类),是否有可能呢? 非常感谢你 使用grails可能是你最好的选择。它有约束和验证,但没有数据库支持。它通常是控制器使用的值对象,但您可以在控制器外部实例化一个值对象,而不会出现任何问题 可以向命令类添加约束。如果一个命令类与控制器位于同一个.groovy文件中(在groovy中,每个.groovy文


我们如何向Groovy类的属性添加一些公共约束(即maxLength、nullable)?我知道我们可以在Grails域类上实现这一点,但如果这是Groovy类(我将它用作Grails项目的DTO类),是否有可能呢?

非常感谢你

使用grails可能是你最好的选择。它有约束和验证,但没有数据库支持。它通常是控制器使用的值对象,但您可以在控制器外部实例化一个值对象,而不会出现任何问题

可以向命令类添加约束。如果一个命令类与控制器位于同一个.groovy文件中(在groovy中,每个.groovy文件中可以有多个公共类),则无需对Grails执行任何特殊操作即可将其重新注册为命令类

但是,如果您的命令类在其他地方(例如在src/groovy下),则需要使用
@Validateable
对其进行注释,并将包名添加到
Config.groovy
中的
grails.Validateable.packages
参数中。下面是一个与控制器不在同一文件中的命令示例

pacakge com.example.command

@Validateable
class Person {
  Integer age
  String name

  static constraints = {
    name(blank: false)
    age(size 0..100)
  }
}
将以下内容添加到
Config.groovy

grails.validateable.packages = ['com.example.command']

命令类有一个由Grails添加的
validate()
方法。调用此方法后,任何错误都将出现在
errors
属性中(根据域类)。

不确定这是否与您的使用相关(我不熟悉DTO),但在当前版本(2.3.8)中,您还可以向抽象类添加Grails约束,它们将被扩展它的域继承。您的IDE可能不喜欢它;)

类似的问题:对于单元测试,您可以使用@TestMixin(ControllerUnitTestMixin)和mockForConstraintsTests。这与用于域对象的典型@TestFor注释不同。