Может ли univocity выполнять валидаторы ИЛИ вместо И? - PullRequest
1 голос
/ 06 мая 2020

Я хотел бы знать, есть ли способ выполнить валидаторы оператором ИЛИ вместо И. В настоящее время, если первый не работает, он не запускает два других, однако мне нужно, чтобы он запустил их все, чтобы вернуть пользователю все соответствующие исправления, которые он должен применить к файлу.

У меня есть что-то вроде :

@Validate(nullable = false, validators = { NumericValidator.class, LengthValidator.class, DataValidator.class })

Я не создаю ни одной проверки, так как я хотел бы создать общие проверки и просто вызвать специфику c в зависимости от поля.

Заранее спасибо.

1 Ответ

1 голос
/ 07 мая 2020

Я решил создать класс вроде

import java.util.HashSet;
import java.util.Set;

import com.univocity.parsers.conversions.Validator;

import co.com.app.constantes.Constants;

public class CustomValidator implements Validator<Object> {

protected Set<Validator<Object>> validators = new HashSet<>();

public CustomValidator() {
    super();
}

@Override
public String validate(Object value) {
    Set<String> errors = new HashSet<>();

    validators.forEach(validator -> {
        String error = validator.validate(value);

        if (error != null) {
            errors.add(error);
        }
    });

    if (errors.isEmpty()) {
        return null;
    }

    return String.join(Constants.COMMA, errors);
    }

}

Затем я создаю валидатор, например

public class FieldValidator extends CustomValidator {
    public FieldValidator() {
        validators.add(new NumericValidator());
        validators.add(new LengthValidator(1, 11));
    }

}

И в DTO я использовал что-то вроде

@Parsed(index = 0)
@NullString(nulls = { Constants.NULL_VALUE, Constants.EMPTY_VALUE })
@Validate(nullable = false, validators = { FieldValidator.class })
private Long field; 
...