Spring Boot 2. 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及更高版本)支持通过注释参数化类型的类型参数来验证容器元素。
参考:

  • http://beanvalidation.org/2.0/
  • https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#_with_code_list_code
List<@NotNull @Pattern(regexp="\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\\b") String> emails;

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

三方包参考:

https://github.com/jirutka/validator-collection

 

Spring Boot 2. hibernate validate List 验证

相关文章:

你感兴趣的文章:

标签云: