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

5

28

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

Septilateral answered 25/4, 2010 at 8:52 Comment(0)
S
26

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>
Shaven answered 25/4, 2010 at 9:2 Comment(1)
See the other answer for latest Bean Validation 1.1 version update.Smote
C
24

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>
Contorted answered 26/6, 2013 at 20:6 Comment(1)
The URL is broken - docs.jboss.org/hibernate/stable/validator/reference/en-US/…Elsewhere
C
2

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.

Casandra answered 2/7, 2019 at 2:15 Comment(0)
T
0

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>
Trachoma answered 3/3, 2022 at 18:43 Comment(0)
V
0

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>
Viddah answered 14/6, 2022 at 20:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.