Как проверить вложенные объекты для значений Null - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над сервисом, который получает запрос от вышестоящей системы.

  • В запросе может быть около 300 полей.
  • Моя задача - обработать заказ, но перед обработкой заказа я должен выполнить проверку данных.
  • Проверка данных в основном включает пустые и пустые проверки. Я должен по крайней мере проверить, являются ли все обязательные поля ни пустыми, ни нулевыми.

Заказ DTO:

public class Order{
   private String orderId;
   private String sourceOrder;
   private String destinationSystem;
   private String orderingTimeStamp;
   private List<Mapper> properties;
          ....
}

Я не хочу проверять ноль на каждом шаге, как if(sourceOrder!=null && !sourceOrder.isEmpty()), так как я бы закончил тем, что написал много шаблонного кода. Итак, я подумал, прежде чем обрабатывать заказ, давайте проверим заказ для null & empty проверок. Если присутствуют все обязательные значения, обработайте заказ, иначе отклоните заказ.

Мне известна аннотация @NotNull, но она не будет работать для вложенных объектов, например, private List<Mapper> properties, будет список объектов. Из этих элементов я хочу проверить только выбранные и не все.

Например, мне нужно проверить только "firstName", "lastName", "Address" в List<Mapper> properties, а не все. Есть ли способ достичь этого, или у нас есть какой-либо шаблон / структура для этого? Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Что бы я сделал, это определил функцию validate для всех вложенных свойств.

Во-первых, вы хотите определить отдельный класс, который имеет различные флаги для управления поведением проверки.

public class OrderValidationOptions {
  // Your options
}

Тогда или наш вложенный тип:

public class Mapper {
 // Other Code

 public boolean validate(OrderValidationOptions options) {
   // validation logic
 }
}

И аналогично в Order классе:

public class Order {
 // Other Code
 private List<Mapper> properties;

 public boolean validate(OrderValidationOptions options) {
   // Other logic
   if (this.properties != null) {
     for(Mapper property: this.properties) {
       property.validate(options)
     }
   }
 }
}
0 голосов
/ 09 апреля 2020

Все списки и наборы расширяют интерфейс Collection. Я использую это. Если у вас есть любой объект example любого типа, вы можете вызвать validate(example);, и вернется правильный результат. Если в примере реализован Collection, будет вызван первый метод, в противном случае - второй.

public boolean validate(Collection c) {
   if(c == null) return false;
   if(c.isEmpty()) return false;
   return true;
}

public boolean validate(Object obj) {
   return obj != null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...