UniVocity, как добавить параметры в пользовательский валидатор - PullRequest
2 голосов
/ 28 марта 2019

Я создаю несколько пользовательских валидаторов для анализатора однозначности и хочу добавить некоторые параметры, например:

   public class Size implements Validator<String>
   int max;

, а затем используйте его так:

   @Parsed
   @Validate(nullable = false, validators = Size.class(8) )
   private String someString;

Я не нашел ничего подобного или примеров с аннотациями.

Может быть, использовать аннотации javax.validation?

Или, может быть, внедрить объект sizeValidation, созданный с помощью конструктора ограничения диапазона?

Спасибо!

1 Ответ

1 голос
/ 04 апреля 2019

Два варианта здесь:

1 - добавить аннотации к установщику (просто, но нельзя многократно использовать:

    @Parsed
    @Validate(nullable = false)
    public void setSomeString(String value){
        if(value.length() < 3 || value.length() > 5){
            throw new DataValidationException("SomeString can't have length " + value.length());
        }
        this.someString = value;
    }

2 - расширить класс ValidatedConversion и использовать этот класс в аннотации @Convert:

public class LengthValidator extends ValidatedConversion {

    private int min;
    private int max;

    public LengthValidator(String... args) {
        super(false, false); //not null / not blank
        this.min = Integer.parseInt(args[0]);
        this.max = Integer.parseInt(args[1]);
    }

    @Override
    protected void validate(Object value) {
        super.validate(value); //let super check for null and whatever you need.
        String string = value.toString();
        if(string.length() < min || string.length() > max){
            throw new com.univocity.parsers.common.DataValidationException("Value can't have length " + string.length());
        }
    }
}

Затем добавьте его в свой атрибут:

    @Parsed
    @Convert(conversionClass = LengthValidator.class, args = {"3", "5"})
    private String someString;

Надеюсь, это поможет.

...