simpatico
simpatico

Reputation: 11107

How do I import javax.validation into my Java SE project?

I'm trying to add constraints checking, as described here How to specify the cardinality of a @OneToMany in EclipseLink/JPA

Upvotes: 28

Views: 79925

Answers (5)

Hany Sakr
Hany Sakr

Reputation: 2939

If you are using spring boot you can add the following dependency

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-validation</artifactId> 
</dependency>

Upvotes: 1

For Maven projects only is necessary use this dependency for validation annotations:

   <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.16.Final</version>
    </dependency>

Upvotes: 0

nokieng
nokieng

Reputation: 2126

An alternative solution other than Hibernate

Overview

javax.validation (validation-api) is validation rules that follows JSR 380 Java Bean Validation Specification. The validation rules need a validator in order to perform validating according to the validation rules.

And there are various validators such as hibernate (the most popular one), Bval, etc.

Bval

Bval is an alternative solution that I think It pretty cool also besides Hibernate. And here you can follow my alternative solution:

MVN

        <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>

Implementation

create static a validator

...

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();
    }

There you go!!!.
Again, validator, it is just a validator, in which you switch to other validators easily.

Pro&Con

It is not that popular, but You gonna like it.

Upvotes: 2

Ondra Žižka
Ondra Žižka

Reputation: 46904

The dependencies as of 2019:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.16.Final</version>
</dependency>

This transitively pulls in the dependency to the Bean Validation API, so you don't need to do this anymore:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

For additional features, Expression Language and CDI support, you might need to add:

<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>

Source: Hibernate Validator documentation

These are all in Maven Central Repo, so you don't need to add the JBoss repo.

And BTW here's my example convenience method:

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() );
    }
}

The Origin.Wise is something like JAXB's @XmlLocation Locator.


In 2013 (the original post) the versions were:

    <!-- 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>

Upvotes: 25

Pascal Thivent
Pascal Thivent

Reputation: 570595

Here are the dependencies I'm using (with 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>

That you can get from this repository:

<repositories>
  <repository>
    <id>jboss</id>
    <name>JBoss repository</name>
    <url>http://repository.jboss.org/maven2</url>
  </repository>
</repositories>

Upvotes: 26

Related Questions