Wie importiere ich javax.validation in mein Java SE-Projekt?
-
01-10-2019 - |
Frage
Ich versuche, Einschränkungen hinzufügen Überprüfung, wie hier beschrieben So geben Sie die Mächtigkeit einer @OneToMany in Eclipse / JPA
Lösung
Hier sind die Abhängigkeiten Ich verwende (mit 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>
Dass man aus diesem Repository bekommen:
<repositories>
<repository>
<id>jboss</id>
<name>JBoss repository</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
</repositories>
Andere Tipps
Die Abhängigkeiten als 2019:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
Dies zieht transitively in der Abhängigkeit der API Bean Validation, so brauchen Sie nicht, dies zu tun mehr:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
Für zusätzliche Funktionen, Expression Language und CDI Unterstützung, könnte man hinzufügen müssen:
<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>
Quelle: Hibernate Validator Dokumentation
Diese sind alle in Maven Zentral Repo, so brauchen Sie nicht die JBoss-Repo hinzuzufügen.
Und BTW hier ist mein Beispiel bequeme Methode:
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() );
}
}
Die Origin.Wise
ist so etwas wie JAXB des @XmlLocation Locator
.
Im Jahr 2013 (das Original post) Versionen waren:
<!-- 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>
Eine alternative andere Lösung als Hibernate
Übersicht |
javax.validation (validation-api)
ist Validierungsregeln, die JSR 380 Java Bean Validation Specification
folgt. Die Validierungsregeln müssen eine validator
, um die Validierung gemäß den Validierungsregeln auszuführen.
Und es gibt verschiedene Validatoren wie hibernate
(das populärste), Bval
, etc.
BVAL
Bval
ist eine alternative Lösung, dass ich denke, es ist auch ziemlich cool neben Hibernate
. Und hier können Sie meine alternative Lösung wie folgt vor:
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>
Implementierung
erstellen statisch ein 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();
}
Dort gehen Sie !!!.
Auch hier Validator, es ist nur ein Validator, in dem Sie einfach auf andere Validatoren wechseln.
Pro & Con
Es ist nicht so populär, aber Du wird es mögen.