У меня есть POJO, как показано ниже:
@Value.Immutable
public interface Customer {
@NotBlank
String name();
Optional<@Valid @NotNull(groups = Address.class) AddressDetails> addressDetails();
@Value.Immutable
interface AddressDetails {
@NotBlank
String details();
}
}
И я написал такой валидатор:
private static Set<ConstraintViolation> validate(final Object object, final Class<?>... groups) {
Set<ConstraintViolation> violations = new HashSet<>();
for (Method method : object.getClass().getInterfaces()[0].getDeclaredMethods()) {
try {
VALIDATOR.validateReturnValue(
object,
method,
method.invoke(object),
groups).forEach(constraint -> {
ConstraintViolation constraintViolation = new ConstraintViolation(
method.getName(),
constraint.getMessageTemplate()
);
violations.add(constraintViolation);
});
} catch (IllegalAccessException | InvocationTargetException e) {
throw new IllegalStateException("daads", e);
}
}
return violations;
}
Когда я передаю следующий объект Customer в методе validate выше,
ImmutableCustomer.builder().name("test").addressDetails(ImmutableAddressDetails.builder().details("")).build
в объекте и группе как Address.class
Мне кажется, что должно возвращаться нарушение, поскольку поле сведений пусто, и я пометил его как NotBlank.Но это не подводит.Есть идеи, что я делаю не так?