Kev*_*ave 1 java regex javabeans bean-validation
@Pattern还是使用其他方法?@Pattern要走的路是什么regex?@Pattern在同一字段的两个不同组中使用两个 注释吗?我想在bean验证中验证字符串是否完全匹配。我应该使用@Pattern还是使用其他方法?
您可以@Pattern非常轻松地使用或实现自定义约束:
@Documented
@Constraint(validatedBy = MatchesValidator.class)
@Target({ METHOD, CONSTRUCTOR, PARAMETER, FIELD })
@Retention(RUNTIME)
public @interface Matches {
String message() default "com.example.Matches.message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String value();
}
Run Code Online (Sandbox Code Playgroud)
使用这样的验证器:
public class MatchesValidator implements ConstraintValidator<Matches, String> {
private String comparison;
@Override
public void initialize(Matches constraint) {
this.comparison = constraint.value();
}
@Override
public boolean isValid(
String value,
ConstraintValidatorContext constraintValidatorContext) {
return value == null || comparison.equals(value);
}
}
Run Code Online (Sandbox Code Playgroud)
如果
@Pattern要走的路是什么regex?
基本上只是要匹配的字符串,只需要转义特殊字符,例如[\ ^ $。|?** +()。有关更多详细信息,请参见此参考。
我可以在同一字段的两个不同组中使用两个@Pattern注释吗?
是的,只需使用@Pattern.List批注:
@Pattern.List({
@Pattern( regex = "foo", groups = Group1.class ),
@Pattern( regex = "bar", groups = Group2.class )
})
Run Code Online (Sandbox Code Playgroud)