我无法使用 spring 框架将 Hibernate Validator 集成到 javaweb 项目中



我试图为我的 Web 项目添加休眠验证,但如果项目中有一个 jar 包:spring-context-indexer-5.0.6.RELEASE.jar,它会导致程序在运行时被抛出:java.lang。 注释。批注格式错误: 类的重复批注 此异常。这将阻止我将休眠验证集成到我的 Web 项目中。如何解决这个问题?

 package CarTest;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
 *
 * @author 
 */
       class Car {
    @NotNull
    private String manufacturer;
    @NotNull
    @Size(min = 2, max = 14)
    private String licensePlate;
    @Min(2)
    private int seatCount;
    public Car(String manufacturer, String licencePlate, int seatCount) {
        this.manufacturer = manufacturer;
        this.licensePlate = licencePlate;
        this.seatCount = seatCount;
    }
    //getters and setters ...
}
public class CarTest {
    public static void main(String[] args) {
        // TODO code application logic here
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        Car car = new Car(null, "DD-AB-123", 4 );
    Set<ConstraintViolation<Car>> constraintViolations =     validator.validate(car);         
        System.out.println(constraintViolations.size());
        System.out.println("must not be null:-----"+constraintViolations.iterator().next().getMessage()); 
    }
}

如果将 spring-context-indexer-5.0.6.RELEASE jar 添加到库中,将发生以下异常。

INFO: HV000001: Hibernate Validator 6.0.16.Final
Exception in thread "main" java.lang.annotation.AnnotationFormatError: Duplicate annotation for class: interface javax.validation.constraints.NotNull: @javax.validation.constraints.NotNull(message={javax.validation.constraints.NotNull.message}, groups=[], payload=[])
    at sun.reflect.annotation.TypeAnnotationParser.mapTypeAnnotations(TypeAnnotationParser.java:360)
    at sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedTypeBaseImpl.<init>(AnnotatedTypeFactory.java:139)
    at sun.reflect.annotation.AnnotatedTypeFactory.buildAnnotatedType(AnnotatedTypeFactory.java:65)
    at sun.reflect.annotation.TypeAnnotationParser.buildAnnotatedType(TypeAnnotationParser.java:79)
    at java.lang.reflect.Field.getAnnotatedType(Field.java:1170)
    at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findCascadingMetaData(AnnotationMetaDataProvider.java:618)
    at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findPropertyMetaData(AnnotationMetaDataProvider.java:236)
    at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getFieldMetaData(AnnotationMetaDataProvider.java:225)
    at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.retrieveBeanConfiguration(AnnotationMetaDataProvider.java:133)
    at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getBeanConfiguration(AnnotationMetaDataProvider.java:124)
    at org.hibernate.validator.internal.metadata.BeanMetaDataManager.getBeanConfigurationForHierarchy(BeanMetaDataManager.java:232)
    at org.hibernate.validator.internal.metadata.BeanMetaDataManager.createBeanMetaData(BeanMetaDataManager.java:199)
    at org.hibernate.validator.internal.metadata.BeanMetaDataManager.getBeanMetaData(BeanMetaDataManager.java:166)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:157)
    at CarTest.CarTest.main(CarTest.java:47)

这是我介绍的罐子包。

在此处输入图像描述

这只是一个小案例。由于休眠验证已添加到我的 Web 项目中,因此这些 jar 包不可避免地会放在一起。但是我不知道如何解决这种异常,希望大家能帮上忙。

你使用的是 Eclipse 还是使用 Eclipse 的 JDT 编译器?

因为我在开发Hibernate验证器时遇到了非常相似的问题(我是HV的项目负责人(。

代码库的所有测试都不会发生这种情况,但对于某些人来说,它最终会出现此错误。

当使用javac编译时(例如使用Maven(,测试可以正确通过(我甚至可以从Eclipse运行东西,只要不是JDT编译类(。

最新更新