是否有uuid验证器注释?

时间:2016-05-19 10:43:19

标签: java spring validation

我无法在java网络应用中找到用于验证输入参数的@UUID(或类似)注释。

到目前为止我已经看了

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

3 个答案:

答案 0 :(得分:19)

是的,自己构建

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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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