logo-cover-Spring Boot 2.0 hibernate validate List 验证
Spring Boot 2.0 hibernate validate List 验证问题解决

在对象中,可能你有一个简单的List<String>集合需要正则验证(例如List<String> emails)。
但是直接在集合的字段上标注
@Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b.")
List<String> emails
上面这种写法就会报错:
HV000030: No validator could be found for constraint 'javax.validation.constraints.Pattern' validating type 'java.util.List<java.lang.String>'. Check configuration for 'parameter.types'"

那么如何验证类似这种简单集合呢?

解决办法有两种:

方法 一:
新建一个对象存储String字段,例如
public EmailVO{
   @Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b.")
   String email;
//get/set
}
然后再
List<EmailVO> emails

方法二:

前置条件:
Bean验证2.0(Hibernate Validator 6.0.1及更高版本)支持通过注释参数化类型的类型参数来验证容器元素。
参考:
List<@NotNull @Pattern(regexp="\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\\b") String> emails;


两个方法都能解决集合的验证问题。可根据自身环境选择。当然还有其他方法。例如自己实现一个验证注解,或者依赖三方工具包

三方包参考:
https://github.com/jirutka/validator-collection