实现Java注释以进行验证

实现Java注释以进行验证,java,validation,hibernate-validator,Java,Validation,Hibernate Validator,我想从org.hibernate.Validator.internal.constraintvalidators.手动调用一个值的验证器,因为我无法对该类进行注释。我所做的是: LengthValidator validator = new LengthValidator(); validator.initialize(new Length() { @Override public Class<? extends Annotation> annotationType(

我想从
org.hibernate.Validator.internal.constraintvalidators.
手动调用一个值的验证器,因为我无法对该类进行注释。我所做的是:

LengthValidator validator = new LengthValidator();
validator.initialize(new Length() {
    @Override
    public Class<? extends Annotation> annotationType() {
        return null;
    }

    @Override
    public Class<? extends Payload>[] payload() {
        return null;
    }

    @Override
    public int min() {
        return min == null ? defaultMin : min;
    }

    @Override
    public String message() {
        return null;
    }

    @Override
    public int max() {
        return max == null ? defaultMax : max;
    }

    @Override
    public Class<?>[] groups() {
        return null;
    }
});
Boolean valid = validator.isValid(myValue.asText(), null));
但编译器抱怨道

注释类型长度不应用作的超级接口 弦长


如何实现我想做的事情?

注意,不鼓励使用内部类,但如果您真的想这样做,可以使用Hibernate验证程序
AnnotationFactory

  AnnotationDescriptor<Length> descriptor = new AnnotationDescriptor<Length>( Length.class );
  descriptor.setValue( "min", 0 );
  descriptor.setValue( "max", 10 );
  ...

  Length lengthAnnotation = AnnotationFactory.create( descriptor );
AnnotationDescriptor descriptor=新的AnnotationDescriptor(Length.class);
描述符。设置值(“最小”,0);
描述符。设置值(“最大”,10);
...
长度长度表示法=AnnotationFactory.create(描述符);

不过,我不太确定使用
LengthValidator
可以获得什么。您仍然不能使用验证器框架,对吗?如果不能对类进行注释,是否可以改用XML配置?

事实上,我想验证无模式的数据,不想重写在Hibernate中可以完美工作的验证器。所以我不能使用XML配置,因为我不知道要验证的数据的结构。这就是为什么我想“动态地”构建注释和调用验证器。我将尝试
注释描述符
;)
  AnnotationDescriptor<Length> descriptor = new AnnotationDescriptor<Length>( Length.class );
  descriptor.setValue( "min", 0 );
  descriptor.setValue( "max", 10 );
  ...

  Length lengthAnnotation = AnnotationFactory.create( descriptor );