我尝试使用hibernate验证器编写非常简单的应用程序:
我的步骤:
在pom.xml中添加以下依赖项:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.1.Final</version> </dependency>
编写代码:
class Configuration { Range(min=1,max=100) int threadNumber; //... public static void main(String[] args) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Configuration configuration = new Configuration(); configuration.threadNumber = 12; //... Set<ConstraintViolation<Configuration>> constraintViolations = validator.validate(configuration); System.out.println(constraintViolations); } }
我得到以下stacktrace:
Exception in thread "main" javax.validation.ValidationException: Unable to instantiate Configuration. at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:279) at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110) ... at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:110) at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:86) at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41) at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276) ... 2 more
我怎么了
添加到pom.xml以下依赖项后,它可以工作:
pom.xml
<dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.el</artifactId> <version>2.2.4</version> </dependency>
Hibernate Validator入门:
Hibernate Validator还需要实现统一表达式语言(JSR 341)来评估约束违例消息中的动态表达式。当您的应用程序在WildFly之类的Java EE容器中运行时,该容器已经提供了EL实现。但是,在Java SE环境中,必须将实现添加为对POM文件的依赖。例如,您可以添加以下两个依赖项以使用JSR 341 参考实现: <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.el</artifactId> <version>2.2.4</version> </dependency>
Hibernate Validator还需要实现统一表达式语言(JSR 341)来评估约束违例消息中的动态表达式。当您的应用程序在WildFly之类的Java EE容器中运行时,该容器已经提供了EL实现。但是,在Java SE环境中,必须将实现添加为对POM文件的依赖。例如,您可以添加以下两个依赖项以使用JSR 341 参考实现: