Я пытаюсь написать очень простое приложение с валидатором гибернации:
мои шаги:
добавить в 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);
}
}
И я получаю следующую трассировку стека:
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
Что я не так?
java
hibernate
validation
maven
hibernate-validator
gstackoverflow
источник
источник
5.2.4.Final
решения проблемы для меня.5.2.4.Final
и исключение все еще существует.Ответы:
Он работает после добавления
pom.xml
следующих зависимостей:Начало работы с Hibernate Validator :
источник
<dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.3.1</version></dependency>
мне хватилопросто делай
источник
hibernate-validator
полагаться на эту зависимость?Если вы используете tomcat в качестве среды выполнения сервера и получаете эту ошибку в тестах (поскольку среда выполнения tomcat недоступна во время тестов), имеет смысл включить среду выполнения tomcat el вместо среды выполнения из glassfish). Это было бы:
источник
tomcat-jasper-el
зависимость, поскольку она, кажется, транзитивно включаетtomcat-el-api
зависимость.Если вы используете весеннюю загрузку со стартерами - эта зависимость добавляет оба
tomcat-embed-el
иhibernate-validator
зависимости:источник
Если вам не нужен javax.el (например, в приложении JavaSE), используйте ParameterMessageInterpolator из валидатора Hibernate . Валидатор Hibernate - это отдельный компонент, который можно использовать без самого Hibernate .
Зависит от hibernate-валидатора
Используйте ParameterMessageInterpolator
источник
Что касается страницы документации валидатора Hibernate , вы должны определить зависимость от
JSR-341
реализации:источник
При использовании Spring Boot это хорошо работает. Даже с Spring Reactive Mongo.
и конфигурация проверки:
источник
для sbt используйте версии ниже
источник
Согласно документации по началу работы с Hibernate Validator , необходимо предоставить реализацию языка выражений (EL) . В среде Java EE он будет предоставляться контейнером. Однако в автономном приложении, таком как ваше, его необходимо предоставить.
Пример зависимости в документации немного устарел, так как в 2018 году язык выражений был переведен на проект Jakarta EE. Чтобы использовать версию языка выражений Jakarta EE, добавьте следующую зависимость Eclipse Glassfish EL:
Существуют и другие реализации EL, которые можно использовать, кроме Glassfish. Например, Spring Boot по умолчанию использует встроенный Tomcat . Эта версия EL может использоваться следующим образом:
источник
для gradle:
источник