我想验证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)
答案 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
接口的实现,用于实现约束的行为。