实现用于验证的Java注释

我想从org.hibernate.validator.internal.constraintvalidators.调用一个Validator 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));

但Sonar并不开心:

Lambdas和匿名课程不应该有太多线条

所以我试图通过在像这样的自定义类中实现@Length来重构此代码:

public class StringLength implements Length {
    // All the methods overriden from @Length
}

但编译器抱怨

注释类型Length不应该用作StringLength的超级接口

我怎样才能做到我想做的事?


请注意,不鼓励使用内部类,但如果您真的想要,可以使用Hibernate Validator AnnotationFactory

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

  Length lengthAnnotation = AnnotationFactory.create( descriptor );

我不太确定,但是你使用LengthValidator获得了什么。 你仍然无法使用Validator框架,对吧? 如果您不能注释该类,那么您是否可以不使用XML配置?

链接地址: http://www.djcxy.com/p/56667.html

上一篇: Implement Java annotations for validation

下一篇: .NET async webservice call with a callback