#oval
#oval
Вопрос:
Существует ли эквивалент метода getPropertyPath в рамках проверки Oval?
С помощью javax.validation я могу вызвать ConstraintViolation#getPropertyPath
, но, похоже, в Oval нет эквивалента. Я что-то упустил?
Вывод
list[].value: example.ValidationDemo$Child.value cannot be null
list[].value: example.ValidationDemo$Child.value cannot be null
Вот код:
package example;
import java.util.List;
import net.sf.oval.ConstraintViolation;
import net.sf.oval.Validator;
import net.sf.oval.constraint.AssertValid;
import net.sf.oval.constraint.NotNull;
import net.sf.oval.context.FieldContext;
public class ValidationDemo {
public static void main(String[] args) {
Validator validator = new Validator();
validator.validate(new Parent())
.forEach(ValidationDemo::printViolation);
}
private static void printViolation(ConstraintViolation violation) {
printViolation(violation, "");
}
private static void printViolation(ConstraintViolation violation, String property) {
FieldContext fieldContext = (FieldContext) violation.getContext();
if (!property.isEmpty()) {
property = ".";
}
property = fieldContext.getField().getName();
if (List.class.isAssignableFrom(fieldContext.getField().getType())) {
property = "[]"; // How do I find the index of violation.getInvalidValue() within the list?
}
if (violation.getCauses() == null) {
System.out.format("%s: %sn", property, violation.getMessage());
} else {
for (ConstraintViolation cause : violation.getCauses()) {
printViolation(cause, property);
}
}
}
public static class Parent {
@AssertValid
public final List<Child> list = List.of(new Child("value"),
new Child(null), new Child(null));
}
public static class Child {
@NotNull
public final String value;
public Child(String value) {
this.value = value;
}
}
}
Ответ №1:
В настоящее время это невозможно. Эту часть кода необходимо будет расширить, чтобы отслеживать индекс.
Ответ №2:
ConstraintViolation.getContextPath()
был добавлен в 3.1.0