哪里可以做产品购物网站,企业画册内容,深圳招聘一般在哪个网站,杭州网络公司应用场景#xff1a;存在银行卡和社保卡的支付、退货等接口#xff0c;接口报文中使用transWay表示银行卡#xff08;0#xff09;和社保卡#xff08;1#xff09;#xff0c;transType表示支付#xff08;1#xff09;、退货#xff08;2#xff09;。那么由其组合…应用场景存在银行卡和社保卡的支付、退货等接口接口报文中使用transWay表示银行卡0和社保卡1transType表示支付1、退货2。那么由其组合便能出现四个逻辑所以要实现动态的逻辑分发。
domain
Data
public class PosApiReq {/** 交易方式 **/private String transWay;/** 交易类型 **/private String transType;
}service
接口定义
public interface ICommonService {public Object handler(String json);
}银行卡消费
Service
CodeType(01)
public class BankConsumService implements ICommonService{Overridepublic Object handler(String json) {System.out.println(银行卡消费开始 json);return bank-consum;}
}银行卡退货
Service
CodeType(02)
public class BankRefundService implements ICommonService{Overridepublic Object handler(String json) {System.out.println(银行卡退货开始 json);return bank-refund;}
}社保卡消费
Service
CodeType(11)
public class SocConsumService implements ICommonService{Overridepublic Object handler(String json) {System.out.println(社保卡消费开始 json);return soc-consum;}
}社保卡退货
Service
CodeType(12)
public class SocRefundService implements ICommonService{Overridepublic Object handler(String json) {System.out.println(社保卡退货开始 json);return soc-refund;}
}controller
RestController
public class ServerController {private final MapString, ICommonService handlerMap new HashMap();Autowiredprivate void setHandler(ListICommonService commonServiceList) {for (ICommonService commonService : commonServiceList) {handlerMap.put(commonService.getClass().getAnnotation(CodeType.class).value(), commonService);}}AnonymousRequestMapping(/api)public Object api(RequestBody PosApiReq posApiReq) {String transWay posApiReq.getTransWay();String transType posApiReq.getTransType();// 01 银行卡消费、02银行卡退货、11 社保卡消费、 12社保卡退货String value transWaytransType;ICommonService commonService handlerMap.get(value);Object object commonService.handler(posApiReq.toString());return object;}
}annotation
Target(value{ElementType.TYPE, ElementType.METHOD})
Retention(RetentionPolicy.RUNTIME)
public interface CodeType {String value();
}此方式完美的解决了根据不通交易调用不通逻辑的问题如果新添加一类交易只需要扩展实现ICommonService 接口的新类就可以。