spring 有uuid验证器注解吗?

m4pnthwp  于 2023-02-15  发布在  Spring
关注(0)|答案(4)|浏览(127)

我找不到一个@UUID(或类似的)注解来验证java web app中的输入参数。
我看了这么久

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

hjqgdpho1#

是的,你自己造吧

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

iugsix8n2#

[更新]

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

[旧答案]

Jaiwo 99的解决方案可以工作,但是我无法从外部设置自定义消息(它被@Pattern的消息覆盖)。如果您需要这样做,我建议您简单地使用如下内容:

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

您可以将模式放在某个静态final字段中以避免重复:

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

zujrkrfu3#

与@Jaiwo99的答案相同,但正如@mrzli指出的,模式的消息覆盖了任何自定义消息。如果您需要自定义消息,在@Pattern中使用message将解决这个问题。

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

rm5edbpk4#

是-参见https://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/constraints/UUID.html
它可以在org. hib中找到。验证程序:hibernate-validator:8.0.0.Final

相关问题