Как проверить, что хотя бы одно поле не равно нулю, если поле является приватным - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать собственный валидатор 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;
    }
  }
}

Как заставить этот валидатор работать, чтобы я мог проверить, что хотя бы одно из полей не равно нулю? Мой текущий код генерирует исключение всякий раз, когда он пытается получить поле.

...