思路一:
1,请求实体,返回实体统一封装,业务数据放在data,packet字段中,其他是公共字段,有利于数据的统一解析(josn-->实体)
状态码用于返回状态
消息用来返回调用信息
业务码用法标记调用业务---利于获取对应的类名,方法名,反射调用---利于代码用设计模式
请求地址
public class FacadeSendRequest {
private String applyNo;
private String bankType;
private String insureChannel;
private String tradeCode;
private String packet; //json数据 业务数据
private String url; //请求地址
}
public class FacadeReceiveRequest {
private String bankType;
private String insureChannel;
private String tradeCode;
private String packet; //银行返回的原报文
private String insureApplyNo; //银行返回的原报文
}
public class ApiResponse implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
private String code = CodeEnum.CODE_0001.getCode();
/**
* 错误描述信息
*/
private String msg = CodeEnum.CODE_0001.getMsg();
/**
* vo 对象
*/
public Object data; //业务数据
}
2,封装格式的拼接,与data的剥离
AbstractFacadeExchange
在一个公共的方法中剥离data
public String callBack(FacadeReceiveRequest facadeReceiveRequest)throws Exception{
String result=null;
try {
String jsonString = JSONObject.toJSONString(facadeReceiveRequest);
String url = apiUrl; //默认回调地址
if(NotifyMethodConstant.INSURE_NOTIFY.equals(facadeReceiveRequest.getTradeCode())){ //投保回调
url = apiInsureUrl;
}
result=HttpClientUtil.httpJsonPost(url, jsonString);
if (StringUtils.isNotBlank(result)){
JSONObject jsonObject = JSONObject.parseObject(result);
if (CodeEnum.CODE_0000.getCode().equals(jsonObject.get("code"))){
result=jsonObject.getString("data");
}
}
} catch (Exception e){
LOGGER.error("请求内部网关异常",e);
}
return result;
}
返回数据的拼接:
BankCallbackController
@RequestMapping("callback/insure")
@ResponseBody
public ApiResponse insureCallback(@Valid @RequestBody FacadeReceiveRequest facadeReceiveRequest, Errors errors) throws Exception {
//验证参数
checkError(errors);
//业务逻辑
ApiResponse apiResponse = new ApiResponse();
try {
String result = insureCallBackService.callback(facadeReceiveRequest);
apiResponse.success();
apiResponse.setData(result);
} catch (Exception e) {
HMonitor.add("bank.callback:exception");
LOGGER.error("银行回调处理异常,参数[{}]", facadeReceiveRequest.toString(), e);
apiResponse.error();
}
return apiResponse;
}
思路二:
当然实体的封装也有另一种思路就是一个抽象父类(公共字段),后面的业务字段类(业务字段)继承抽象父类----这种设计没有上面设计的简单
相关推荐
易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 实用: 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了dao框架,可以使我们更容易的开发和配置我们的dal...
设计思路1. Adapter如果用adapter常规写法,你会发现代码量很大,可读性低。如果adapter中有多个类型的Item,我们还得在getView()中写很多if-else语句,很乱。 而现在我让adapter的代码量减少到一个8行的内部类,...
目 录 绪论 - 1- 一、背景与意义 - 2- 二、设计原理与方案 - 2- 一)方案 - 2- 二)设计思路 - 3- 三)系统分析 - 3- 四)程序概要设计 - 4- 五)工作流程图 - 4- 六)程序框图 - 5- 七)程序中所用类说明 - 5- 八)...
抽象工厂Abrstract Factory设计模式的使用思路 1.提供一系列相互依赖对象的创建 2.封装对象的常规创建new方法 3.提供统一调用数据访问方法的方式 4.避免调用数据访问方法和具体对象创建的松耦合
将生成器用元程序封装在域实体之中;按照设计模式的作用和具体的变量值生成详细的VHDL代码。应用实例表明,所提模式生成的代码有效性高,设计过程可行性强,可广泛应用于复杂的时钟控制系统的设计领域。
1.执行过程思路:先根据sql语法把sql字符串切割成各个有效部分,把其相应的封装到运行时实体中, 相当于把.java编译成了.class,再读取dbf文件,执行实体对dbf文件内容进行相应的操作,相当于 类加载执行,实现sql...
学会分析“基于控制台的购书系统”程序任务实现的逻辑思路。 能独立完成“基于控制台的购书系统”程序的源代码编写、编译及运行。 理解和掌握面向对象的设计程序。 会用类图进行面向对象设计。 掌握封装的...
通过解析实体,调用通用的XML来实现多表查询,提供一个设计多表查询的思路,复杂SQL封装等目前并不支持。 目前支持: 左join方式,能关联的两张表的实体中关联分区名称必须相同,数据库分区可以不一样可以通@Table...
在ASP.NET 1.1下实现模板化站点的新思路 在ASP.Net中两种利用CSS实现多界面的方法 用于弹出ModalDialog进行数据选择的控件 使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能...
主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...
本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...
本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...
结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体...
根据您的知识,请简要谈一下您的思路 答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。 32.给定以下XML文件,完成算法流程图。 <FileSystem> < DriverC > ”MSDOS622”> ” Command....
例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;...
例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;...