【问题标题】:Validating domain model in Spring在 Spring 中验证域模型
【发布时间】:2014-03-05 20:56:40
【问题描述】:

我想找到一种方法来确保如果创建了域模型对象,它在满足所有业务规则的含义上是有效的,例如:

  • 客户有有效的联系地址
  • 地址包含所有必填字段
  • 等等

我有一个想法,让每个域对象模型都有自己的类,该类用作验证器类并用于验证实例是否有效。

public interface IValidator {    
    public boolean isValid();    
}

AccountType 域模型类的接口实现简图:

public final class AccountTypeValidator implements IValidator {

    private final AccountType accountType;

    public AccountTypeValidator(final AccountType accountType) {
        this.accountType = accountType;
    }

    public boolean isValidName() {
        if (StringUtils.isBlank(accountType.getName()) == true) {
            return false;
        }
        return true;
    }

    public final boolean isValid() {
        if (isValidName() == false) {
            return false;
        }
        return true;
    }

}

当我在我的应用程序中使用这个验证类时,我可以做类似的事情:

    public void setAccountType(final AccountType accountType) {

        AccountTypeValidator validator = new AccountTypeValidator(accountType);

        if (validator.isValid() == false) {
            throw new IllegalArgumentException("....");
        }

        this.accountType = accountType;

    }

优点:

  • 为我的所有域模型定义自己的验证规则
  • 验证我感兴趣的所有对象或具体字段
  • 获取指示哪些字段无效的错误验证消息(并将其用作异常中的描述,例如)

缺点:

  • 为所有域模型定义自己的验证规则
  • 当我有很多对象(例如 AccountType 类的实例)时,我需要为所有对象创建新对象(资源消耗)

我确信没有必要重新发明轮子,所以我想问你是否有什么东西(库、最佳实践等)可以用来解决这种情况。我用谷歌搜索了“按合同设计”概念的原则,并在 SO 上找到了一些相应的主题,但我仍然不确定如何解决它的最佳方法是什么。

我想找到最简单的解决方案,消耗最少的系统资源的解决方案,易于使用并且在含义上稳健,以确保域模型对象有效。

【问题讨论】:

  • 是否有原因导致 JSR-303 @Valid 和相关注释无法满足您的需求?
  • 没有原因-我不知道,我去看看。

标签: java spring validation


【解决方案1】:

Spring 自动启用注解驱动的声明式验证 如果 JSR-303 提供程序(例如 Hibernate Validator)存在于您的 类路径。

看看这个:

http://spring.io/blog/2009/11/17/spring-3-type-conversion-and-validation/

【讨论】:

    【解决方案2】:

    首先查看Bean Validation API,在Hibernate Validator 中实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多