Я пытаюсь создать собственный валидатор javax, который бы проверял, является ли хотя бы одно из полей упоминания ненулевым. Я попытался, следуя этому примеру, Аннотация проверки Hibernate - проверить, что по крайней мере одно поле не является пустым
Замена библиотеки Apache commons с отражением. Поскольку у меня нет доступа к этому в этом проекте, и вместо этого мне нужно использовать hiberate validator, javax validator или что-либо, что поставляется со встроенным
Объект для проверки имеет такую структуру.
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
@AtleastOneFilled(fieldNames = {"username", "email"},
groups = {TestGroup.class}
, message = ValidationsConstants.MISSING_REQUIRED_USERNAME_EMAIL)
public class TestClass {
String username;
String email;
}
и команда isValid валидатора запрограммирована так:
@Override
public boolean isValid(Object object, ConstraintValidatorContext context) {
if (object == null)
return true;
try {
for (String fieldName: fieldNames){
Field property = object.getClass().getDeclaredField(fieldName);
//not allowed to use setAccessible.
if (property.get(object)!=null) return true; // throws IllegalAccessException
}
return false;
} catch (Exception e) {
return false;
}
}
}
Как заставить этот валидатор работать, чтобы я мог проверить, что хотя бы одно из полей не равно нулю? Мой текущий код генерирует исключение всякий раз, когда он пытается получить поле.