J'essaye d'écrire une application très simple avec le validateur d'hibernation:
mes pas:
ajoutez la dépendance suivante dans pom.xml:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>
écrire le code:
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);
}
}
Et je reçois le stacktrace suivant:
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'est-ce que je me trompe?
java
hibernate
validation
maven
hibernate-validator
gstackoverflow
la source
la source
5.2.4.Final
résoudre le problème pour moi.5.2.4.Final
et l'exception est toujours là.Réponses:
Il fonctionne après l'ajout des
pom.xml
dépendances suivantes:Premiers pas avec Hibernate Validator :
la source
<dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.3.1</version></dependency>
était suffisant pour moifais juste
la source
hibernate-validator
sur cette dépendance?Si vous utilisez tomcat comme runtime de votre serveur et que vous obtenez cette erreur dans les tests (car le runtime tomcat n'est pas disponible pendant les tests), il est logique d'inclure le runtime tomcat el au lieu de celui de glassfish). Ce serait:
la source
tomcat-jasper-el
dépendance, car elle semble inclure de manière transitoire latomcat-el-api
dépendance.Si vous utilisez Spring Boot avec des démarreurs - cette dépendance ajoute à la fois
tomcat-embed-el
ethibernate-validator
dépendances:la source
Si vous n'avez pas besoin de javax.el (par exemple dans une application JavaSE), utilisez ParameterMessageInterpolator de Hibernate validator . Le validateur Hibernate est un composant autonome, qui peut être utilisé sans Hibernate lui-même.
Dépend du validateur d'hibernation
Utiliser ParameterMessageInterpolator
la source
Concernant la page de documentation du validateur Hibernate , vous devez définir une dépendance à une
JSR-341
implémentation:la source
Si vous utilisez Spring Boot, cela fonctionne bien. Même avec Spring Reactive Mongo.
et configuration de validation:
la source
pour sbt, utilisez les versions ci-dessous
la source
Selon la documentation Getting started with Hibernate Validator , une implémentation du langage d'expression (EL) doit être fournie. Dans un environnement Java EE, il serait fourni par le conteneur. Cependant, dans une application autonome telle que la vôtre, elle doit être fournie.
L'exemple de dépendance de la documentation est un peu daté, car le langage d'expression est passé au projet Jakarta EE en 2018. Pour utiliser la version Jakarta EE du langage d'expression, ajoutez la dépendance Eclipse Glassfish EL suivante:
Il existe d'autres implémentations EL qui pourraient être utilisées autres que Glassfish. Par exemple, Spring Boot utilise par défaut Tomcat intégré . Cette version d'EL peut être utilisée comme suit:
la source
pour gradle:
la source