Abr*_*sis 6 java regex validation spring spring-boot
我有一个 RESTful 服务,它接收POST
带有UUID
值的请求并将它们写入数据库。所以问题是验证是否UUID
有效。为此,我实现了自定义注释:
@Constraint(validatedBy = {})
@Target({ElementType.FIELD})
@Retention(RUNTIME)
@Pattern(regexp = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[34][0-9a-fA-F]{3}-[89ab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}")
public @interface validUuid {
String message() default "{invalid.uuid}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
但是由于某种原因它不起作用,即使我通过了有效的UUID
我也经常得到一个例外:
javax.validation.UnexpectedTypeException: HV000030: 找不到约束“javax.validation.constraints.Pattern”验证类型“java.util.UUID”的验证器
是否有任何选项可以UUID
正确验证?
您不能将@Pattern
注释应用于java.util.UUID
不是CharSequence
. 从@Pattern
注释文档(强调我的):
接受CharSequence。null 元素被认为是有效的。
此外,据我所知,您尝试通过将验证注释处理程序传递给新的注释定义来扩展验证注释处理程序的行为。
如果您希望执行更复杂的验证,只需在没有其他验证注释的情况下创建您的注释 - 它们的组合不会像这样工作。必须有一些东西可以识别注释并验证它们。
@Target({ElementType.FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = UuidValidator.class)
public @interface ValidUuid {
String message() default "{invalid.uuid}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
现在,创建一个验证器,它实现ConstraintValidator<ValidUuid, UUID>
并覆盖执行验证本身的方法。
public class UuidValidator implements ConstraintValidator<ValidUuid, UUID> {
private final String regex = "....." // the regex
@Override
public void initialize(ValidUuid validUuid) { }
@Override
public boolean isValid(UUID uuid, ConstraintValidatorContext cxt) {
return uuid.toString().matches(this.regex);
}
}
Run Code Online (Sandbox Code Playgroud)
并应用注释:
@ValidUuid
private UUID uuId;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5457 次 |
最近记录: |