何时使用Bean Validation而不是自定义验证框架?

5

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

@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个回答

5
我认为这是一个品味和使用案例的问题。我同意有时会感觉自己陷入了某种注释过载。
使用Bean Validation的一些原因是它是一种标准化的方式。约束注释已经标准化,并且许多框架与之集成,例如JPA,以防您想要添加另一个基于注释的框架 ;-)
使用类似Spring这样的东西会将您绑定到特定的库/框架上。您的代码将不太易于移植。当然,如果您从未看到过离开Spring的情况,那么这可能无关紧要。
当然,您也可以完全自己编写一些东西,但在这种情况下,您需要将整个集成代码编写到Spring、REST、JPA等中。
此外,编写通用的验证框架并不容易。有许多需要考虑的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接