我正在验证数据访问对象类的字段。在一次尝试中,我已经开始向属性添加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....
}
}
答案 0 :(得分:3)
我认为这是一个品味和用例的问题。我同意有时感觉最终会出现某种注释过载。
使用Bean验证的一些原因是它是一个标准。约束注释是标准化的,并且许多框架与它集成,例如JPA,以防您想要添加另一个基于注释的框架; - )
使用像Spring这样的东西将你绑定到特定的库/框架。您的代码将不那么便携。如果你当然从未看到过将Spring抛在后面的情况,那可能并不重要。
当然你可以做一些完全成熟的事情,但在这种情况下你需要把整个集成代码编写成例如Spring,REST,JPA等。
编写通用验证框架并非易事。有很多事情需要考虑。