我正在处理一项服务,该服务接收来自上游系统的请求
- 请求可以有大约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;
}