如何在Groovy中的字符串字段上强制构造函数规则不为null而不为空

时间:2014-02-25 07:04:25

标签: groovy

我想添加一些特定的业务规则,以在实例化实体时强制执行验证。

实体的类有一个名为String的字段名称。我想强制说,name字段在构造期间必须至少有一个内容字符。

我如何在模型中处理这些业务规则?我希望在实体级别拥有它,并避免在服务中处理此验证。

1 个答案:

答案 0 :(得分:1)

您可以使用GContracts之类的内容。然后你可以像这样声明一个类Invariant

@Grab('org.gcontracts:gcontracts:1.1.3')
import org.gcontracts.annotations.*

@Invariant( { name?.size() > 0 } )
class Entity {
    String name

    public Entity( String name ) {
        this.name == name
    }
}

assert new Entity( 'tim' )
assert new Entity( '' )

该示例中对new Entity( '' )的调用失败:

org.gcontracts.ClassInvariantViolation: <class invariant> Entity

{ name?.size() > 0 }
  |     |      |
  ""    0      false