Saya mencoba menulis aplikasi yang sangat sederhana dengan validator hibernate:
langkah saya:
tambahkan ketergantungan berikut di pom.xml:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>
tulis kode:
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);
}
}
Dan saya mendapatkan stacktrace berikut:
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
Apa yang salah
java
hibernate
validation
maven
hibernate-validator
gstackoverflow
sumber
sumber
5.2.4.Final
memecahkan masalah saya.5.2.4.Final
dan pengecualiannya masih ada.Jawaban:
Ini berfungsi setelah menambahkan ke
pom.xml
dependensi berikut:Memulai dengan Hibernate Validator :
sumber
<dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.3.1</version></dependency>
cukup bagi sayalakukan saja
sumber
hibernate-validator
mengandalkan ketergantungan itu?Jika Anda menggunakan tomcat sebagai runtime server Anda dan Anda mendapatkan kesalahan ini dalam pengujian (karena runtime tomcat tidak tersedia selama pengujian) daripada memasukkan runtime el tomcat daripada yang dari glassfish). Ini akan menjadi:
sumber
tomcat-jasper-el
dependensi, karena tampaknya secara transitif menyertakantomcat-el-api
dependensi.Jika Anda menggunakan boot musim semi dengan permulaan - ketergantungan ini menambahkan keduanya
tomcat-embed-el
danhibernate-validator
ketergantungan:sumber
Jika Anda tidak memerlukan javax.el (misalnya dalam aplikasi JavaSE), gunakan ParameterMessageInterpolator dari validator Hibernate . Validator Hibernate adalah komponen mandiri, yang dapat digunakan tanpa Hibernate itu sendiri.
Bergantung pada hibernate-validator
Gunakan ParameterMessageInterpolator
sumber
Mengenai halaman dokumentasi validator Hibernate , Anda harus menentukan ketergantungan pada
JSR-341
implementasi:sumber
Jika menggunakan Spring Boot ini berfungsi dengan baik. Bahkan dengan Spring Reactive Mongo.
dan konfigurasi validasi:
sumber
untuk sbt, gunakan versi di bawah ini
sumber
Sesuai dengan dokumentasi Memulai Hibernate Validator , implementasi Expression Language (EL) perlu disediakan. Di lingkungan Java EE, ini akan disediakan oleh container. Namun, dalam aplikasi mandiri seperti milik Anda, itu perlu disediakan.
Contoh dependensi dokumentasi agak ketinggalan zaman, karena bahasa ekspresi dialihkan ke proyek Jakarta EE pada tahun 2018. Untuk menggunakan bahasa ekspresi versi Jakarta EE, tambahkan dependensi Eclipse Glassfish EL berikut :
Ada implementasi EL lain yang bisa digunakan selain Glassfish. Misalnya, Spring Boot secara default menggunakan Tomcat tertanam . Versi EL ini dapat digunakan sebagai berikut:
sumber
untuk gradle:
sumber