簡體   English   中英

實施Java批注進行驗證

[英]Implement Java annotations for validation

我想從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));

但是聲納並不高興:

Lambda和匿名類不應包含太多行

所以我試圖通過在這樣的自定義類中實現@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配置嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM