【发布时间】:2019-10-16 11:29:08
【问题描述】:
我在这里进退两难。
所以,我有这个 Rest API,它充当另一个使用它的 API 和来自外部提供者的 SOAP API 之间的简化代理。
在其中,我有 4 个方法对应于 4 个 Soap 端点,它们将来自 Rest 请求 DTO-s 的数据映射到 Soap 请求 DTO-s。
4 个 Rest 请求 DTO-s 有一个 CommonDto,其中包含所有请求共有的一些对象。
这个常见的 REST 请求 DTO 的某些字段可以为空,如果是这样,我有空检查,所以我根本不设置相应的 SOAP 请求字段,因为这会使 SOAP 请求失败。
这4种方法基本上是这样的:
public RestResponseObject1 method1(RestRequestObject1 rRO1){
SoapRequestObject1 sRO1= new SoapRequestObject1();
Object commonField1= rR01.getCommonField1();//Object can be anything, BigDecimal, String, int,etc.
if(commonField1!=null){
sRO1.setCommonField1(commonField1);
}
BigDecimal commonField2= rR01.getCommonField2();
if(commonField2!=null){
sRO1.setCommonField2(commonField2.intValue());
}
//etc....
return Mapper.map(soapService.doSoapMethod1(sRO1);
}
这个方法重复了4次,有不同的RestRequestObjects、RestResponseObjects和SoapRequestObjects,但是它们之间的commonfields类型没有变化。
我的问题是,我怎样才能抽象出 nullchecks,这样我就不会为每个方法重复它们,从而使我的代码更清晰?请注意,我无法对 Soap 请求对象执行任何操作,因为它们是通过 Swagger/OpenApi 自动生成的
【问题讨论】:
-
所以你的意思是所有soap请求对象类型都没有通用接口或父类?
-
你也在使用java8或更高版本吗?
-
是的,是的,没有通用接口,也没有继承的可能性
标签: java oop coding-style