我找不到一个@UUID(或类似的)注解来验证java web app中的输入参数。我看了这么久
@UUID
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 {}; }
iugsix8n2#
[更新]
来自@Jaiwo99的解决方案不会显示指定的消息,而是显示来自@Pattern的错误消息。要解决此问题,只需将@ReportAsSingleViolation注解添加到@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 {}; }
[旧答案]
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}$"; }
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 {}; }
rm5edbpk4#
是-参见https://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/constraints/UUID.html它可以在org. hib中找到。验证程序:hibernate-validator:8.0.0.Final
4条答案
按热度按时间hjqgdpho1#
是的,你自己造吧
iugsix8n2#
[更新]
来自@Jaiwo99的解决方案不会显示指定的消息,而是显示来自
@Pattern
的错误消息。要解决此问题,只需将@ReportAsSingleViolation
注解添加到@Jaiwo的解决方案中。(@LudovicRonsin在此答案的注解中指出了这一点,@helospark在@Jaiwo99答案的注解中指出了这一点。)[旧答案]
Jaiwo 99的解决方案可以工作,但是我无法从外部设置自定义消息(它被
@Pattern
的消息覆盖)。如果您需要这样做,我建议您简单地使用如下内容:您可以将模式放在某个静态final字段中以避免重复:
zujrkrfu3#
与@Jaiwo99的答案相同,但正如@mrzli指出的,模式的消息覆盖了任何自定义消息。如果您需要自定义消息,在@Pattern中使用message将解决这个问题。
rm5edbpk4#
是-参见https://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/constraints/UUID.html
它可以在org. hib中找到。验证程序:hibernate-validator:8.0.0.Final