【问题标题】:How do I import javax.validation into my Java SE project?如何将 javax.validation 导入我的 Java SE 项目?
【发布时间】:2022-01-11 23:00:00
【问题描述】:

我正在尝试添加约束检查,如此处所述How to specify the cardinality of a @OneToMany in EclipseLink/JPA

【问题讨论】:

    标签: jpa jakarta-ee eclipselink hibernate-validator bean-validation


    【解决方案1】:

    这是我正在使用的依赖项(使用 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>
    

    【讨论】:

    【解决方案2】:

    截至 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 documentation

    这些都在 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 的 @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>
    
    【解决方案3】:

    Hibernate以外的替代解决方案

    概述

    javax.validation (validation-api) 是遵循JSR 380 Java Bean Validation Specification 的验证规则。验证规则需要validator 才能根据验证规则执行验证。

    还有各种验证器,如hibernate(最流行的)、Bval等。

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

    你去吧!!!。
    同样,验证器,它只是一个验证器,您可以在其中轻松切换到其他验证器。

    正反

    它不是那么受欢迎,但你会喜欢的。

    【讨论】:

      【解决方案4】:

      仅对于 Maven 项目,需要将此依赖项用于验证注释:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-12
        • 2023-03-15
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多