思路一:
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;
}
思路二:
当然实体的封装也有另一种思路就是一个抽象父类(公共字段),后面的业务字段类(业务字段)继承抽象父类----这种设计没有上面设计的简单
相关推荐
超市收银系统设计思路 一、系统整体架构 在超市收银系统设计中,使用C/S架构设计是非常重要的。C/S架构的基本原则是将计算机应用任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布”原则。客户端完成...
本文将深入探讨领域模型设计的思路,结合给定的文件名,我们可以推测这是一个与网络通信或者消息处理相关的系统,涉及到数据包的解析和业务处理。 首先,领域模型的设计应该基于业务需求,它应包含业务领域的核心...
7. **文档**:项目文档包括设计思路、需求分析、系统架构、数据库设计、功能模块描述等,它们为开发者提供了清晰的开发指南。设计思路部分会阐述系统的设计理念、主要功能模块划分及实现方式,帮助理解整个系统的...
在这个设计思路中,我们将深入探讨如何构建一个高效、可扩展且易于维护的PetShop应用。 首先,我们要理解多层架构的含义。多层架构是一种将应用程序分解为多个独立组件的方法,这些组件负责不同的职责,从而提高...
### 佩恩沃星球-参考设计思路及结果 #### 设计背景与目标 佩恩沃星球项目的开发旨在构建一个基于面向对象编程思想的游戏系统。该项目的核心在于如何有效地将游戏中的各种元素(如角色、装备、等级等)进行合理抽象...
本文将围绕"新闻发布系统设计思路(Dao与service)"这一主题,深入解析DAO(Data Access Object)层和服务(Service)层的设计与实现。 DAO层是数据库访问层,其主要职责是处理与数据库的交互,包括数据的读取、写入...
易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 实用: 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了dao框架,可以使我们更容易的开发和配置我们的dal...
本文将详细介绍一种名为`CustomerAdapter`的封装方案,旨在通过一个适配器解决所有列表显示的需求,并探讨其设计理念与实现细节。 #### 理念 1. **通用性**:构造一个通用的`Adapter`模板,避免每次添加新列表时都...
### 用组件来重构你的游戏实体 ...对于任何规模的游戏项目来说,采用组件化的设计思路都将带来显著的好处。开发者们可以根据项目的具体需求选择合适的技术栈和工具链,进一步优化组件化设计的实现效果。
面向对象程序设计的设计思路是将问题域中的实体和概念 abstract 为对象和类,从而可以更好地模拟和解决问题。在设计题目中,学生需要设计书、CD、磁带三个类,每个类含有名字、作者或演唱者、出版社或唱片社、价格、...
因此,本文旨在提供 Java 程序设计课程的案例设计思路和参考。 2. 问题驱动教学法 问题驱动教学是高效的方法,鼓励学生思考真实问题并渐进掌握知识。本文将其与累进式案例设计相结合,以学生已知知识为出发点,...
该文档详细阐述了数据库的设计思路和具体实施步骤,涵盖了需求分析、数据库规划、表设计、实体关系图、实体属性、表的详细信息以及数据库其他对象设计等内容。 ### 数据库需求分析 在需求分析部分,文档指出了系统...
大型仪器共享管理系统的设计思路主要包括:设备资源的梳理、共享流程的设计、系统平台的功能设计和技术实现等方面。 在设备资源的梳理方面,需要对设备资源和共享流程进行梳理,根据仪器设备资源的类型设置仪器设备...
为了实现真分页,我们需要设计一个分页实体类,该类包含了分页所需的各项属性,如当前页、上一页、下一页、首页、尾页以及每页显示的数据条数等。这些属性在分页逻辑中起着关键作用,帮助我们计算出正确的SQL查询...
在IT行业中,数据库操作是应用程序的核心部分,而DAO(Data Access Object)模式是连接业务逻辑层与数据存储层的关键。本篇文章将深入探讨一个...这种设计思路在大型项目中尤为常见,有助于保持代码的整洁和可维护性。
2. 设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 3. 设计模式使得设计方案更加灵活,且易于修改。 设计模式的基本要素 ...
3. **数据访问对象(DAO, Data Access Objects)**:封装了与数据库交互的代码,如增删改查操作。 4. **服务层(Service Layer)**:业务逻辑处理,调用DAO来操作数据。 5. **控制器(Controller)**:如Servlet或...