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