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

时间:2018-12-05 18:42:42

标签: java spring validation

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

1 个答案:

答案 0 :(得分:1)

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

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

您的验证将能够检查您想要测试的任何字段(我不记得在每次通过字段级注释之后是否通过了类级约束,因此您可能必须检查URI是否不是{{ 1}})。