Intento escribir una aplicación muy simple con validador de hibernación:
mis pasos:
agregue la siguiente dependencia en pom.xml:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>
escribir código:
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);
}
}
Y obtengo el siguiente 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
¿Qué hago mal?
java
hibernate
validation
maven
hibernate-validator
gstackoverflow
fuente
fuente
5.2.4.Final
resolverme el problema.5.2.4.Final
y la excepción todavía está ahí.Respuestas:
Está funcionando después de agregar a las
pom.xml
siguientes dependencias:Comenzando con Hibernate Validator :
fuente
<dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.3.1</version></dependency>
fue suficiente para míhaz solo
fuente
hibernate-validator
confía en esa dependencia?Si está utilizando tomcat como tiempo de ejecución del servidor y obtiene este error en las pruebas (porque el tiempo de ejecución de tomcat no está disponible durante las pruebas), tiene sentido incluir el tiempo de ejecución de tomcat el en lugar del de glassfish). Esto sería:
fuente
tomcat-jasper-el
dependencia, ya que parece incluir de forma transitiva latomcat-el-api
dependencia.Si está usando Spring Boot con arrancadores, esta dependencia agrega ambas
tomcat-embed-el
yhibernate-validator
dependencias:fuente
En caso de que no necesite javax.el (por ejemplo, en una aplicación JavaSE), use ParameterMessageInterpolator del validador de Hibernate . El validador de Hibernate es un componente independiente, que se puede utilizar sin Hibernate .
Depende del validador de hibernación
Utilice ParameterMessageInterpolator
fuente
Con respecto a la página de documentación del validador de Hibernate , debe definir una dependencia a una
JSR-341
implementación:fuente
Si usa Spring Boot, esto funciona bien. Incluso con Spring Reactive Mongo.
y configuración de validación:
fuente
para sbt, use las siguientes versiones
fuente
Según la documentación de Introducción a Hibernate Validator , se debe proporcionar una implementación de Lenguaje de expresión (EL) . En un entorno Java EE, lo proporcionaría el contenedor. Sin embargo, en una aplicación independiente como la suya, debe proporcionarse.
El ejemplo de dependencia de la documentación está un poco anticuado, ya que el lenguaje de expresión pasó al proyecto Jakarta EE en 2018. Para usar la versión Jakarta EE del lenguaje de expresión, agregue la siguiente dependencia de Eclipse Glassfish EL:
Hay otras implementaciones de EL que podrían usarse además de Glassfish. Por ejemplo, Spring Boot usa Tomcat integrado de forma predeterminada . Esta versión de EL se puede utilizar de la siguiente manera:
fuente
para gradle:
fuente