Однозначность как добавить параметры в пользовательский валидатор

#java #validation #univocity

#java #проверка #однозначность

Вопрос:

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

    public class Size implements Validator<String>
   int max;
  

а затем использовать его следующим образом:

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

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

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

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

Спасибо!

Комментарии:

1. Частично решена. Размер может быть проверен с помощью регулярного выражения ^_^ matches = "^.{3,5}$" размер min = 3, max = 5

Ответ №1:

Здесь два варианта:

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;
  

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

Комментарии:

1. Это очень помогает. Спасибо! отличная библиотека, кстати. Я комбинирую регулярное выражение с проверенным преобразованием, и это работает … быстро! 🙂