سؤال

أحاول إضافة قيود فحص ، كما هو موضح هنا كيفية تحديد Cardinality of onetomany في Eclipselink/JPA

هل كانت مفيدة؟

المحلول

فيما يلي التبعيات التي أستخدمها (مع 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>

نصائح أخرى

التبعيات اعتبارًا من عام 2019:

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

هذا يسحب بشكل عابر التبعية إلى واجهة برمجة تطبيقات التحقق من صحة الفول ، لذلك لا تحتاج إلى القيام بذلك بعد الآن:

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

مصدر: وثيقة التحقق من السبات

هذه كلها في Maven Central Repo ، لذلك لا تحتاج إلى إضافة JBoss Repo.

وبالمناسبة ، إليك طريقة الراحة الخاصة بي:

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's @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>

حل بديل بخلاف Hibernate

ملخص

javax.validation (validation-api) هو قواعد التحقق من الصحة التالية JSR 380 Java Bean Validation Specification. تحتاج قواعد التحقق من الصحة validator من أجل إجراء التحقق من التحقق وفقًا لقواعد التحقق من الصحة.

وهناك العديد من المدققين مثل hibernate (الأكثر شعبية) ، Bval, ، إلخ.

بفال

Bval هو حل بديل أعتقد أنه رائع أيضًا إلى جانب ذلك Hibernate. وهنا يمكنك متابعة الحل البديل الخاص بي:

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>

تطبيق

إنشاء مدقق ثابت

...

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

ها أنت ذا!!!.
مرة أخرى ، المدقق ، إنه مجرد مدقق ، حيث تقوم بالتبديل إلى صحة آخرين بسهولة.

المحترف والخداع

هذا ليس شائعًا ، لكنك ستعجبك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top