根据输入值更改 Java 验证器的@Pattern正则表达式



我正在使用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}

您应该编写一个自定义验证器,如下所述:

  1. 创建用@Constraint(validatedBy = CustomConstraintValidator.class)注释的新注释CustomConstraint
  2. 有一些类CustomConstraintValidator实现ConstraintValidator<CustomConstraint, YourType>
  3. @CustomConstraint标注YourType
  4. 根据您的bean值在CustomConstraintValidator中进行验证

您的验证将能够检查您想要测试的任何字段(我不记得每次字段级注释通过后是否通过了类级约束,所以您可能必须检查URI是否不是null(。

相关内容

  • 没有找到相关文章

最新更新