如何验证字符串的集合以及每个元素作为URL?

时间:2019-04-30 17:52:48

标签: java spring hibernate validation annotations

我想验证Collection<String>中的URL。每个元素都是URL,我以字符串的形式获取。

@Valid
@URL
@ElementCollection 
public Collection<String> getPictures() {       
    return this.pictures;   
}

public void setPictures(final Collection<String> pictures) {         
      this.pictures = pictures;     
}

我想知道Spring是否有一些注释,使我可以验证该集合中的所有字符串(例如URL)

1 个答案:

答案 0 :(得分:1)

没有注释可以直接验证该字段。自定义注释@URL的想法是完全正确的,但是您必须自己实施验证-注释只是“此事应该发生”的标记。

我建议您将@URL重命名为@URLCollection,以避免与类java.net.URL发生冲突。首先定义注释。不要忘了注释@Constraint(请查看其文档以了解如何正确定义自定义验证注释):

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UrlCollectionValidator.class)     // will be created below
public @interface URLCollection {
    String message() default "default error message";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

然后继续执行ConstraintValidator

public class UrlCollectionValidator implements ConstraintValidator<URLCollection, Collection<String>> {

    @Override
    public void initialize(URLCollectionconstraint) { }

    @Override
    public boolean isValid(Collection<String> urls, ConstraintValidatorContext context) {
        return // the validation logics
    }
}

仅此而已。在春季文档的Configuring Custom Constraints中了解有关此内容的更多信息:

  

每个bean验证约束由两部分组成:* @Constraint注释,用于声明约束及其可配置属性。 * javax.validation.ConstraintValidator接口的实现,用于实现约束的行为。