是否有uuid验证器注释?

Ema*_*gan 12 java validation spring

我无法@UUID在java Web应用程序中找到用于验证输入参数的(或类似)注释.

到目前为止我已经看过了

  1. javax.validation.constraints
  2. org.hibernate.validator.constraints

Jai*_*o99 21

是的,自己建造它

@Target(ElementType.FIELD)
@Constraint(validatedBy={})
@Retention(RUNTIME)
@Pattern(regexp="^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$")
public @interface UUID {
    String message() default "{invalid.uuid}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)

  • 在违反约束的情况下,这将返回 @Pattern 注释的错误消息,而不是自定义的 `message()`。要从外部返回自定义错误消息集,您可以添加 `javax.validation.ReportAsSingleViolation` 元注释。 (5认同)
  • 谢谢你@Jaiwo99我希望验证uuids是很常见的,所以它已经包含在库中,我不需要重新发明轮子... (4认同)
  • @dazito 这可以通过将 `Pattern.Flag.CASE_INSENSITIVE` 标志传递给 `@Pattern` 来轻松修复 (2认同)

Jim*_*urt 11

在提出问题时还没有,但同时它已从 org.hibernate.validator:hibernate-validator:8.0.0.Final 开始添加

https://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/constraints/UUID.html


mrz*_*zli 5

Jaiwo99的解决方案有效,但我无法从外部设置自定义消息(它被消息覆盖@Pattern).如果你需要,我建议你只使用这样的东西:

@Pattern(regexp = SomeUtilClass.UUID_PATTERN, message = "TokenFormatError")
private String token;
Run Code Online (Sandbox Code Playgroud)

您可以将模式放在一些静态最终字段中以避免重复:

public static SomeUtilClass {
    public static final String UUID_PATTERN = "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$";
}
Run Code Online (Sandbox Code Playgroud)