最近在做java整合SAP中的OData服务做微信端的一个报表展示,刚开始预定的连接数是比较少的大概也就20多个,我就用了一个Enum去设计OData枚举,但是随着合同的追加,OData连接数越来越多大概增加了70多个,之前那个OData就越来越长导致我去找某个OData服务的时候十分的恶心,于是我就将原来的OData去进行拆分,为了尽可能得减少代码的修改我借用了java中的多态,大体是这么回事:
#OData服务顶层接口
/**
* ip 连接OData服务ip, date向OData服务中发送的信息(大部分是时间)
*/
public interface ODataUrlEnumInterface{
// 获取OData服务链接
getUrl(String ip , String date);
}
public enum XXXXODataUrlEnum implements ODataUrlEnumInterface {
A("/ZHK_ODATA_xxx_SRV/RAXHCWxx_RAXHCWxx_CW_O_001(A0CALDAY='","',A0CALDAYTo='",2);
//url前缀
private String PRE_URL;
//url中间格式
private String MID_URL;
//参数个数
private int PARAM_COUNT = 1;
private XinHengODataUrlEnum(String PRE_URL) {
this.PRE_URL = PRE_URL;
}
private XinHengODataUrlEnum(String PRE_URL,String MID_URL,int PARAM_COUNT) {
this.PRE_URL = PRE_URL;
this.MID_URL = MID_URL;
this.PARAM_COUNT = PARAM_COUNT;
}
@Override
public String getUrl(String ip,String date) {
StringBuffer buffer = new StringBuffer();
buffer.append("http://");
buffer.append(ip);
buffer.append("/sap/opu/odata/sap/");
buffer.append(PRE_URL);
if(PARAM_COUNT == 1) {
buffer.append(date);
}else if(PARAM_COUNT == 2) {String[] dataArr = date.split(":");
if (dataArr.length != 2) {
return "日期数据格式不对";
}
buffer.append(dataArr[0]);
buffer.append(MID_URL);
buffer.append(dataArr[1]);
buffer.append("')/Results?$format=json");
}
}
接着就是将最外层获取枚举的参数类型改成接口类型就行了;
public <T extends ODataUrlEnumInterface> getJsonDataFromDataByCondition(T t ,String queryStr)