Я пытаюсь добавить проверку ограничений, как описано здесь Как указать мощность @OneToMany в EclipseLink/JPA
Как импортировать javax.validation в проект Java SE?
Ответ 1
Вот зависимости, которые я использую (с Maven):
<dependencies>
<!-- Bean Validation API and RI -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.2.GA</version>
</dependency>
</dependencies>
Что вы можете получить из этого репозитория:
<repositories>
<repository>
<id>jboss</id>
<name>JBoss repository</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
</repositories>
Ответ 2
Зависимости по состоянию на 2019 год:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
Это транзитивно вытягивает зависимость от Bean Validation API, так что вам больше не нужно это делать:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
Для дополнительных функций, языка выражений и поддержки CDI вам может потребоваться добавить:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b09</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>6.0.16.Final</version>
</dependency>
Источник: документация по Hibernate Validator.
Это все в Maven Central Repo, поэтому вам не нужно добавлять репо JBoss.
И кстати вот мой пример удобного метода:
public static <T extends Object> void validate( T object ) throws MigrationException
{
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> valRes = validator.validate( object );
if( ! valRes.isEmpty() )
{
StringBuilder sb = new StringBuilder("Validation failed for: ");
if( object instanceof Origin.Wise )
sb.append( ((Origin.Wise)object).getOrigin() );
else
sb.append(object);
for( ConstraintViolation<T> fail : valRes)
{
sb.append("\n ").append( fail.getMessage() );
}
throw new IllegalArgumentException( sb.toString() );
}
}
Origin.Wise
- это что-то вроде JAXB @XmlLocation Locator
.
В 2013 году (оригинальный пост) версии были:
<!-- BeanValidation and Hibernate Validator. -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.0.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b08</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>5.4.0.Final</version>
</dependency>
Ответ 3
Альтернативное решение, кроме Hibernate
обзор
javax.validation(validation-api)
- это правила проверки, соответствующие JSR 380 Java Bean Validation Specification
javax.validation(validation-api)
JSR 380 Java Bean Validation Specification
. Правила валидации нуждаются в validator
, чтобы выполнить валидацию в соответствии с правилами валидации.
И есть различные валидаторы, такие как hibernate
(самый популярный), Bval
и т.д.
Bval
Bval
- альтернативное решение, которое, на мой взгляд, довольно круто, кроме Hibernate
. И здесь вы можете следовать моему альтернативному решению:
МВН
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-jsr</artifactId>
<version>2.0.2</version>
</dependency>
Реализация
создать статический валидатор
...
import javax.validation.Validation;
import javax.validation.Validator;
import org.apache.bval.jsr.ApacheValidationProvider;
...
private static final Validator validator;
static {
validator = Validation.byProvider(ApacheValidationProvider.class).configure().buildValidatorFactory()
.getValidator();
}
Вот и ты !!!
Опять же, валидатор, это просто валидатор, в котором вы легко переключаетесь на другие валидаторы.
Pro & Con
Это не так популярно, но Тебе это понравится.