Как импортировать javax.validation в мой проект Java SE?

Я пытаюсь добавить проверку ограничений, как описано здесь ">Как указать кардинальность @OneToMany в EclipseLink/JPA


person simpatico    schedule 25.04.2010    source источник


Ответы (3)


Вот зависимости, которые я использую (с 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>
person Pascal Thivent    schedule 25.04.2010
comment
См. другой ответ для последних Обновление версии Bean Validation 1.1. - person Basil Bourque; 30.07.2014

Зависимости по состоянию на 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, поэтому вам не нужно добавлять репозиторий 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 - это что-то вроде @XmlLocation Locator JAXB.


В 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>
person Ondra Žižka    schedule 26.06.2013

Альтернативное решение, отличное от Hibernate

Обзор

javax.validation (validation-api) — это правила проверки, следующие за JSR 380 Java Bean Validation Specification. Правилам проверки требуется validator, чтобы выполнить проверку в соответствии с правилами проверки.

И есть различные валидаторы, такие как hibernate (самый популярный), 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

Он не так популярен, но Вам понравится.

person nokieng    schedule 02.07.2019