我正在使用Java的Validator类来验证Spring Object类中的一些输入字段。我正在验证uri,它们可以是http://myURL/uri或"readFromURI.v1"格式。最初,我只是验证第一部分,所以我的Object类有:
@Pattern(regexp="[\w\s.,;:*&@(){}+-=?/|!\[\]%#$~]{0,512}", message="incorrect format")
private String URI;
现在,如果用户在我的应用程序中选择了一个复选框,他们将以第二种格式输入值,所以我创建了一个新的regexp:
@Pattern.List({
@Pattern(regexp="[\w\s.,;:*&@(){}+-=?/|!\[\]%#$~]{0,512}", message="incorrect format"),
@Pattern(regexp="^"(Create|Read|Update|Delete)[a-zA-Z]+.*vd+"${0,512}", message="incorrect format")
})
private String URI;
regexp在第二部分中可能是错误的,稍后我可能会问这个问题。但现在,每当我验证其中一种格式时,它都会同时满足这两个条件。所以我假设我写它的方式,它试图应用这两个regex。如何根据值选择一个?如果有帮助的话,该值字段在同一类中:
private String URI;
private boolean useHttp; //if true, validate using [\w\s.,;:*&@(){}+-=?/|!\[\]%#$~]{0,512}
您应该编写一个自定义验证器,如下所述:
- 创建用
@Constraint(validatedBy = CustomConstraintValidator.class)
注释的新注释CustomConstraint
- 有一些类
CustomConstraintValidator
实现ConstraintValidator<CustomConstraint, YourType>
- 用
@CustomConstraint
标注YourType
- 根据您的bean值在
CustomConstraintValidator
中进行验证
您的验证将能够检查您想要测试的任何字段(我不记得每次字段级注释通过后是否通过了类级约束,所以您可能必须检查URI
是否不是null
(。