如何验证嵌套对象的Null值




我正在处理一项服务,该服务接收来自上游系统的请求

  • 请求可以有大约300个字段
  • 我的任务是处理订单,但在处理订单之前,我必须进行数据验证
  • 数据验证主要涉及空&空支票。我必须至少检查所有必填字段是否既不为空也不为空

订单DTO:

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

我不想在每一步都检查null,比如if(sourceOrder!=null && !sourceOrder.isEmpty()),因为我最终会写很多样板代码
因此,我认为在处理订单之前,让我们验证订单以进行null & empty检查。如果存在所有强制值,则处理订单,否则拒绝订单。


我知道@NotNull注释,但它不适用于嵌套对象,例如private List<Mapper> properties,它将有一个对象列表。在这些元素中,我只想验证选定的,而不是全部


例如,我必须仅验证List<Mapper> properties中的"firstName", "lastName", "Address",而不是全部。
有什么方法可以实现它吗?或者我们有什么设计模式/框架可以做到这一点吗
请帮忙。

我要做的是在所有嵌套属性上定义一个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)
}
}
}
}

所有列表和集合扩展接口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;
}

相关内容

  • 没有找到相关文章

最新更新