Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Проверка данных в приложении введённых пользователем или полученных другим путём в классическом понимании подразумевает использование всего лишь двух выражений в коде: TRUE и FALSE.
Что за "классическое понимание", и где вы его взяли? В .net IValidatableObject.Validate возвращает коллекцию ValidationResult, а ModelState (в ASP.net MVC) содержит коллекцию ModelError.
Не всегда эту реализацию возможно использовать в проекте. Например: в JavaSE или android.
Плюс к этому там используются исключения при валидации.
Set<ConstraintViolation>. ValidationException — один из основных. Вот здесь больше описано про исключения.Нет, я имел ввиду что при проверках(под капотом этой реализации) бросаются исключения, которые потом оборачиваются в Set ConstraintViolation. ValidationException — один из основных. Вот здесь больше описано про исключения.
Set<ConstraintViolation<Product>> product_violations = validator.validate(product);
if (product_violations.size() > 0) {
StringBuilder strBuilder = new StringBuilder();
product_violations.stream().forEach(violation -> strBuilder.append(violation.getMessage()).append("; "));
throw new CustomValidationException(strBuilder.toString());
}
quantityField.addValidator(
new Field.Validator() {
@Override
public void validate(Object value) throws ValidationException {
if (value != null && value instanceof BigDecimal
&& ((BigDecimal)value).compareTo(new BigDecimal(1000)) > 0) {
throw new ValidationException(getMessage("quantityIsTooBig"));
}
}
}
); @Deprecated
interface Validator<T> extends Consumer<T> {
/**
* @param value field value to validate
* @throws ValidationException this exception must be thrown by the validator if the value is not valid
*/
void validate(@Nullable Object value) throws ValidationException;
@Override
default void accept(T t) {
validate(t);
}
}
А с JavaSE я был не прав. Но ведь такой подход применим и для других языков, а не только там где есть такие вещи как JSR-303, JSR-349, JSR-380.
Валидация данных: другой подход