Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有uuid验证程序注释?_Java_Spring_Validation - Fatal编程技术网

Java 是否有uuid验证程序注释?

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-

我找不到用于验证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-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}$";
    }