【问题标题】:How can I validate a collection of string and each element as a URL?如何验证字符串集合和每个元素作为 URL?
【发布时间】:2019-09-19 10:25:47
【问题描述】:

我想验证 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

【问题讨论】:

  • 没有直接直接的注解,您可以使用 Hibernate 验证框架,您可以创建自己的注解来验证字段/类等。

标签: java spring hibernate validation annotations


【解决方案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
    }
}

嗯,就是这样。在 Spring 文档中的 Configuring Custom Constraints 上阅读有关此内容的更多信息:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多