是否有 uuid 验证器注释?

2022-09-01 18:19:26

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

到目前为止,我已经看过了

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

答案 1

是的,自己建造

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

答案 2

[已更新]

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

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

推荐