是否存在uuid验证器注释



我在java web应用程序中找不到用于验证输入参数的@UUID(或类似)注释。

到目前为止,我已经在中查看了

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

是的,自己构建

@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 {};
}

[更新]

@Jaiwo99的解决方案不会显示指定的消息,而是显示@Pattern的错误消息。要解决这个问题,只需将@ReportAsSingleViolation注释添加到@Jaiwo的解决方案中即可。(@LudovicRonsin在对这个答案的评论中指出了这一点,@helospark在对@Jaiwo99的回答的评论中也指出了这。)

@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}$")
@ReportAsSingleViolation
public @interface UUID {
    String message() default "{invalid.uuid}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

[旧答案]

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

@Pattern(regexp = SomeUtilClass.UUID_PATTERN, message = "TokenFormatError")
private String token;

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

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}$";
}

在提出这个问题时,没有一个,但同时它已经从org.hibernate开始添加。validator:hibernate validator:8.0.最终

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

与@Jaiwo99的答案相同,但正如@mrzli所指出的,模式的消息覆盖了任何自定义消息。如果您想要自定义消息,在@Pattern中使用消息将修复此问题。

@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}$", message = "Not a valid UUID")
public @interface UUID {
    String message() default "{invalid.uuid}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

最新更新