接口项目servlet的一种处理方式,其他层有异常全部网上抛,抛到servlet层,将异常返回给调用者:

Servlet层:

private void processRequest(HttpServletRequest httpRequest,
HttpServletResponse httpResponse) throws ServletException, IOException { InputStream inStream =null;
BufferedReader br =null;
String reJson="";
String rtJson="";
String tranId=""; //返回报文字段
String resultCode = "1";
String resultMsg = "失败";
try {
httpRequest.setCharacterEncoding("UTF-8");
inStream = httpRequest.getInputStream();
String reqUrl= httpRequest.getRequestURI();
syslogger.info(reqUrl);
String[] method = reqUrl.split("/", 0);
Map headMap = this.getHeaderMap(httpRequest);
Map params = this.getParameterMap(httpRequest);
syslogger.info(params);
br = new BufferedReader(new InputStreamReader(inStream,"UTF-8"));
String str=br.readLine();
StringBuffer json = new StringBuffer();
while (str != null) {
try {
json.append(str);
str = br.readLine();
} catch (Exception blExc) {
System.out.println("请求参数获取出错------------str:"+str);
throw new CommonRunException(blExc.getMessage(), blExc, "");
}
}
reJson=json.toString();
syslogger.info("resultlog 请求------------"+json);
// String httpMethod = httpRequest.getMethod().toUpperCase();
System.out.println("resultlog 请求------------"+json);
//调用相关的程序逻辑
tranId=RequestUtil.getMapValue(headMap,"X-CTG-Request-Id");
if("".equals(tranId)){
tranId=RequestUtil.getMapValue(headMap,"X-CTG-Request-ID");
}
//调用实现类参数
String param = "";
try {
//逐层解析报文获取请求参数
JSONObject jsobRst1 = JSONObject.fromObject(json.toString());
syslogger.info("jsobRst1 请求------------"+jsobRst1);
// String svcCont = jsobRst1.getString("svcCont");
// JSONObject requestObject = JSONObject.fromObject(svcCont);
// param = requestObject.get("requestObject").toString();
param = jsobRst1.toString();
} catch (Exception e) {
System.out.println("请求参数解析出错------------str:"+json);
syslogger.info("解析报文出错 请求------------"+e);
throw new Exception("解析报文出错 请求------------"+e);
}
//逻辑处理类 参考 GETcustCRMProCustationGetImagesAPI
GETcustSyncSaleAPI logic = new GETcustSyncSaleAPI();
//绑定参数
logic.injectDepObject(param);
//实现类执行请求
logic.process();
//调用实现类返回值处理
Map implRtn = new HashMap();
implRtn = (Map)logic.getReturnObject(); if (implRtn.containsKey("error")) {
resultCode = "1";
resultMsg = implRtn.get("error").toString();
}else {
resultCode = "0";
if (implRtn.containsKey("msg")) {
resultMsg = implRtn.get("msg").toString();
}else {
resultMsg = "成功";
} } httpResponse.setCharacterEncoding("UTF-8");
httpResponse.setHeader("Content-type", "application/json;charset=UTF-8");
//返回接口调用的处理结果
OutputStreamWriter objOutputStrm = new OutputStreamWriter(httpResponse.getOutputStream(),"UTF-8");
try {
// Map respMap = new HashMap();
JSONObject SvcCont = new JSONObject();
SvcCont.put("resultCode", resultCode);
SvcCont.put("resultMsg", resultMsg);
// respMap.put("svcCont", SvcCont);
// JSONObject resObject = JSONObject.fromObject(respMap);
// syslogger.info("resultlog 返回------------"+respMap);
// objOutputStrm.write(resObject.toString());
// rtJson=resObject.toString();
objOutputStrm.write(SvcCont.toString());
rtJson=SvcCont.toString();
} catch (Exception e) {
e.printStackTrace();
}finally {
objOutputStrm.flush();
objOutputStrm.close();
} } catch (Exception e) {
syslogger.info(e.toString());
syslogger.fatal(e.getMessage(), e);
throw new ServletException(e.getMessage());
}finally{
try {
if (br != null){
br.close();
br = null;
}
if (inStream != null){
inStream.close();
inStream = null;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
// setInsertSoapMsgHistory( reJson, rtJson,
// "0", tranId,"CustSyncSale");
}
}
}

service层:

public void processLogic() {
//返回map
respMap = new HashMap();
syslogger.info("processLogic start");
syslogger.info("paraMap start"+respMap);
eimServiceHolder = DBServiceHolderFactory.getDBServiceHolder(IDBServiceHolderConsts.JTCRM_APP);
//返回map
JSONObject SvcCont = new JSONObject(); Map<Object, Object> map = new HashMap<Object, Object>();
String statusCD = null; //接口标识
String type = "";
Map list = new HashMap();
JSONObject jsonObject = null;
if(paraMap == null || paraMap.equals("")){
syslogger.info("GETcustxxxx.processLogic............................请求报文接受异常!");
return;
}else{
jsonObject = JSONObject.fromObject(paraMap);
map = (Map)jsonObject;
}
System.out.println("入参:"+paraMap);
String result = paraMap;
statusCD = CSUtil.o2s(map.get("statusCD")); try {
if("1200".equals(statusCD) || "1000".equals(statusCD)){ //新建送审/审核通过
Object rtn = eimServiceHolder.execute(service, "insertRel", new Object[]{result});
respMap.put("msg", rtn.toString());
}else if ("1100".equals(statusCD)) {//审核不通过/删除
Object rtn = eimServiceHolder.execute(service, "deleteRel", new Object[]{result});
respMap.put("msg", rtn.toString());
System.out.println("删除(更新)成功");
}else {
System.out.println("入参中statusCD异常,statusCD:"+statusCD);
throw new Exception("入参中statusCD异常,statusCD:"+statusCD);
}
syslogger.info("respMap start"+respMap);
} catch (Exception e) {
e.printStackTrace();
respMap.put("error", e.toString());
} syslogger.info("processLogic end");
return;
}

接口项目servlet的一种处理方式,将异常返回给调用者【我】的更多相关文章

  1. class类名在webpack项目中的两种引用方式

    一.问题描述 在项目工程中,我们通常既用到css module,也用到普通的less文件引用方式,代码及webpack配置如下,运行时,发现只有css module起作用,如何让两者都起作用呢? // ...

  2. Servlet的三种实现方式

    A: 实现Servlet接口 B: 继承GenericServlet C: 继承HttpServlet,它是对Http协议进行了封装

  3. Spring-Aop的两种代理方式

    Spring-Aop两种代理方式: 1.JDK动态代理:用于目标类实现了接口: 2.Cglib动态代理:用于目标类没有实现接口: spring会依据目标类是否实现接口来选择使用哪种代理方式(目标类:相 ...

  4. Web---创建Servlet的3种方式、简单的用户注册功能

    说明: 创建Servlet的方式,在上篇博客中,已经用了方式1(实现Servlet接口),接下来本节讲的是另外2种方式. 上篇博客地址:http://blog.csdn.net/qq_26525215 ...

  5. 在web项目中获取ApplicationContext上下文的3种主要方式及适用情况

    最近在做web项目,需要写一些工具方法,涉及到通过Java代码来获取spring中配置的bean,并对该bean进行操作的情形.而最关键的一步就是获取ApplicationContext,过程中纠结和 ...

  6. servlet三种实现方式之三通过继承HttpServlet开发servlet

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第三种: import java.io.*; i ...

  7. Servlet三种创建方式

    直接实现 Servlet 接口不太方便,所以 Servlet 又内置了两个 Servlet 接口的实现类(抽象类),分别为 GenericServlet 和 HttpServlet,因此,创建 Ser ...

  8. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序

    SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论   异常汇总:http://www ...

  9. SpringBoot整合Servlet的两种方式

    SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...

随机推荐

  1. linux 提升NFS性能

    如何修改同时发起的NFS请求数量 阿里云ecs服务器请查看官方文档 linux上NFS性能只有几MB速度.NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能 ...

  2. Win10如何设置插入鼠标后自动禁用触摸板

    首先按“Windows+R”键,调出运行窗口.  然后输入“control”然后点击“确定”!  打开Win10控制面板  在“控制面板”中,选择“硬件和声音”!  选择“AUSU Amart Ges ...

  3. Java Spring Boot 一些调试技巧

    配置文件的管理 有的时候我们希望开发环境和测试环境的配置文件放在一起可以快速切换 spring boot 为我们提供了很方便的的选项 在 application.properties 中只需要添加属性 ...

  4. maven中jar冲突解决

    Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题.本文将从jar包冲突的原理和解决两个方面阐述Maven中jar包冲 ...

  5. Fiborial 题解——2019.10.14

    一看到这个题 就感觉...cao,, 什么东西...??! 然后就开始暴力求Fn 然鹅我并不会写高精(我太菜了) 只能求到大概10左右 在吧Fn给质因数分解 求出其因子个数 妄图找到什么有关的规律 但 ...

  6. 洛谷P2607题解

    想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断 ...

  7. shell中脚本参数传递getopts

    while getopts ":a:b:c:" opt do case $opt in a) echo "参数a的值$OPTARG" ;; b) echo &q ...

  8. 3D中的相机 - 投影矩阵和视图矩阵

    3D中的相机 - 投影矩阵和视图矩阵 3d游戏中,一般通过相机的设置来计算投影矩阵和视图矩阵,比如untiy和cocos,一般情况下我们不用关注如何计算, 可以直接在可视化的编辑器中调整参数就可以了, ...

  9. oracle 使用length()函数需要注意的坑!

      1.情景展示 筛选出指定字段字符长度既不等于18也不等于15的数据. 2.原因分析 第一步:按字符串度进行分组统计: 第二步:筛选数据. 你会发现,只将length=17统计了出来,长度不存在的数 ...

  10. 一种Winform类electron的实现

    最近看了一篇文章  Winform客户端内嵌Vue页面  使用html作为winform的界面(其实这种做法早在MFC时代就已经有了),不过感觉文章中的封装并不够彻底,所以我忍不住要发一篇博客来说说我 ...