Ich versuche, eine sehr einfache Anwendung mit Hibernate Validator zu schreiben:
meine Schritte:
Fügen Sie die folgende Abhängigkeit in pom.xml hinzu:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>
Code schreiben:
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);
}
}
Und ich bekomme folgenden 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
Was mache ich falsch?
java
hibernate
validation
maven
hibernate-validator
gstackoverflow
quelle
quelle
5.2.4.Final
für mich gelöstes Problem.5.2.4.Final
und die Ausnahme ist immer noch da.Antworten:
Es funktioniert nach dem Hinzufügen zu
pom.xml
folgenden Abhängigkeiten:Erste Schritte mit Hibernate Validator :
quelle
<dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.3.1</version></dependency>
war ausreichend für michmach es einfach
quelle
hibernate-validator
auf diese Abhängigkeit?Wenn Sie Tomcat als Server-Laufzeit verwenden und diesen Fehler in Tests erhalten (da die Tomcat-Laufzeit während der Tests nicht verfügbar ist), ist es sinnvoll, die Tomcat el-Laufzeit anstelle der von glassfish einzuschließen. Das wäre:
quelle
tomcat-jasper-el
Abhängigkeit einschließen , da sie dietomcat-el-api
Abhängigkeit transitiv einzuschließen scheint .Wenn Sie Spring Boot mit Startern verwenden, fügt diese Abhängigkeit sowohl
tomcat-embed-el
als auchhibernate-validator
Abhängigkeiten hinzu:quelle
Wenn Sie javax.el nicht benötigen (z. B. in einer JavaSE-Anwendung), verwenden Sie ParameterMessageInterpolator vom Hibernate-Validator . Der Hibernate-Validator ist eine eigenständige Komponente, die ohne Hibernate selbst verwendet werden kann.
Abhängig vom Ruhezustand-Validator
Verwenden Sie ParameterMessageInterpolator
quelle
In Bezug auf die Dokumentationsseite des Hibernate-Validators müssen Sie eine Abhängigkeit von einer
JSR-341
Implementierung definieren:quelle
Wenn Sie Spring Boot verwenden, funktioniert dies gut. Auch mit Spring Reactive Mongo.
und Validierungskonfiguration:
quelle
Verwenden Sie für sbt die folgenden Versionen
quelle
Pro die mit Hibernate Validator Getting Started Dokumentation, eine Expression Language (EL) muss die Umsetzung zur Verfügung gestellt werden. In einer Java EE-Umgebung würde dies vom Container bereitgestellt. In einer eigenständigen Anwendung wie Ihrer muss diese jedoch bereitgestellt werden.
Das Abhängigkeitsbeispiel der Dokumentation ist etwas veraltet, da die Ausdruckssprache 2018 auf das Jakarta EE-Projekt umgestellt wurde. Um die Jakarta EE-Version der Ausdruckssprache zu verwenden, fügen Sie die folgende Eclipse Glassfish EL-Abhängigkeit hinzu:
Es gibt andere EL-Implementierungen, die anders als Glassfish verwendet werden könnten. Beispielsweise verwendet Spring Boot standardmäßig eingebettetes Tomcat . Diese Version von EL kann wie folgt verwendet werden:
quelle
für gradle:
quelle