Java 是否有uuid验证程序注释?
我找不到用于验证java web应用程序中输入参数的Java 是否有uuid验证程序注释?,java,spring,validation,Java,Spring,Validation,我找不到用于验证java web应用程序中输入参数的@UUID(或类似)注释 我已经看了很久了 javax.validation.constraints 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-
@UUID
(或类似)注释
我已经看了很久了
是的,你自己建造
@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 {};
}
@Target(ElementType.FIELD)
@约束(validatedBy={})
@保留(运行时)
@模式(regexp=“^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$”)
公共@接口UUID{
字符串消息()默认值“{invalid.uuid}”;
类[]组()默认值{};
班级[更新]
@Jaiwo99的解决方案不会显示指定的消息,而是会显示@Pattern
中的错误消息。要解决此问题,只需在@Jaiwo的解决方案中添加@reportassingelivision
注释。(@LudovicRonsin在对该答案的评论中指出了这一点,@helospark在对@Jaiwo99答案的评论中指出了这一点。)
您可以将图案放在某个静态最终字段中,以避免重复:
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}$";
}
与@Jaiwo99的答案相同,但正如@mrzli所指出的,该模式的消息会覆盖任何自定义消息。如果需要自定义消息,则在@pattern中使用消息将修复此问题
@Target(ElementType.FIELD)
@约束(validatedBy={})
@保留(运行时)
@模式(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=“不是有效的UUID”)
公共@接口UUID{
字符串消息()默认值“{invalid.uuid}”;
类[]组()默认值{};
ClassThank@Jaiwo99我希望验证UUID足够常见,这样它就已经包含在库中了,我不需要重新发明轮子……如果违反约束,这将返回@Pattern注释的错误消息,而不是自定义消息()
。若要从外部返回自定义错误消息集,您可以添加javax.validation.ReportAssingeViolation
metaannotation.@Jaiwo99您的界面对我不起作用。它不会抛出自定义消息。也不会抛出默认消息。@dazito通过将模式.Flagtern
@Jaiwo99您不能将“@Pattern”注释应用于某些内容(java.util.UUID)这不是一个字符序列。如果您想在@RestController endpoint上进行验证,那么我认为更简单的方法是只使用java.util.UUID类型。如果无法将HTTP请求中的值映射到有效的UUID,那么spring只需拒绝请求:)至少有3种方法可以在组合约束中定义您自己的消息(如@Jaiwo99答案)*使用静态默认消息设置@Pattern
消息字段。*使用@javax.validation.OverridesAttribute
覆盖@Pattern
默认消息,并提供使用约束上下文化的能力。*@javax.validation.ReportAssingeViolation
仅返回注释设置的消息在本例中,我将使用@reportAssingeViolation
参见
@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}$";
}