#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. Это очень помогает. Спасибо! отличная библиотека, кстати. Я комбинирую регулярное выражение с проверенным преобразованием, и это работает … быстро! 🙂