何时使用Bean Validation与自定义验证框架?

时间:2016-07-25 19:18:57

标签: java spring validation bean-validation spring-validator

我正在验证数据访问对象类的字段。在一次尝试中,我已经开始向属性添加Bean Validation注释(@NotNull,@ NotBlank,@ Min,@ Max等)。我还有更多注释Jackson(JsonProperty(..))用于swagger库和文档(@Api(...))。在我看来,课堂非常“肮脏”#34;带有许多注释(每个属性至少有三个注释)。一个字段的示例:

@JsonProperty("ownName")
@Api(description="it is my own name" required=true)
@Valid
@NotNull
private SomeObject object; 

在另一次尝试中,我使用Spring Validator接口执行了自己的验证。如果使用自定义验证器(如Spring接口),它似乎更清晰,并且允许您自由地为不同情况生成多个验证器。此外,该类似乎没有如此重载注释和验证独立于类。 Validator的示例:

public class UserValidator implements Validator {

    @Override
    public boolean supports(Class<?> arg0) {
        return User.class.isAssignableFrom(arg0);
    }

    @Override
    public void validate(Object obj, Errors error) {
        User user = (User) obj;
        if(user.getPassword().length() < 10)
        {
            error.reject("Password must be lesser than 10");
        }

        //more validations....

    }
}
  • 你什么时候使用?
  • 各自的优点和缺点是什么?

1 个答案:

答案 0 :(得分:3)

我认为这是一个品味和用例的问题。我同意有时感觉最终会出现某种注释过载。

使用Bean验证的一些原因是它是一个标准。约束注释是标准化的,并且许多框架与它集成,例如JPA,以防您想要添加另一个基于注释的框架; - )

使用像Spring这样的东西将你绑定到特定的库/框架。您的代码将不那么便携。如果你当然从未看到过将Spring抛在后面的情况,那可能并不重要。

当然你可以做一些完全成熟的事情,但在这种情况下你需要把整个集成代码编写成例如Spring,REST,JPA等。

编写通用验证框架并非易事。有很多事情需要考虑。