接口项目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 service进程管理

    Linux进程基本介绍: 1)在Linux中,每个执行的程序(代码)都称为一个进程.每一个进程都分配一个ID号. 2)每一个进程,都对应一个父进程,而这个父进程可以复制多个子进程.例如www服务器. ...

  2. Python时间模块。

    python中时间的表示方式 unix时间戳,字符串时间,格式化时间 时间模块有,time,datetime,calendar #time模块 import time #获取本地时间戳,返回浮点数 p ...

  3. 【转】tf.train.MonitoredTrainingSession()解析

    原文地址:https://blog.csdn.net/mrr1ght/article/details/81006343. 本文有删减. MonitoredTrainingSession定义 首先,tf ...

  4. Zipkin 的 Docker 镜像使用

    1.Zipkin 在 dockerhub 上网址:https://hub.docker.com/r/openzipkin/zipkin 2.下载镜像 docker pull openzipkin/zi ...

  5. HDU6592 Beauty Of Unimodal Sequence

    Beauty Of Unimodal Sequence 给一个序列,在满足单调递增或者单调递减或者先增后减的最长子序列集合里找到下标字典序最大以及最小的两个子序列,输出这两个子序列里元素的下标. n≤ ...

  6. python基础语法3 元组,字典,集合

    元组: ========================元组基本方法===========================用途:存储多个不同类型的值定义方式:用过小括号存储数据,数据与数据之间通过逗号 ...

  7. 在IAR平台建立STC8ASK64S4A12单片机工程

    转载:http://www.51hei.com/bbs/forum.php?mod=viewthread&tid=168481&page=1#pid737250  一般我们使用STC单 ...

  8. MongoDB Shell db.runCommand

    db.runCommand()示例 我们使用MongoDB Shell登录到mongos,添加Shard节点 [root@100 shard]# /usr/local/mongoDB/bin/mong ...

  9. smashing 开源方便的dashboard 试用

    smashing 一个方便的dashboard 工具,是在Shopify/dashing 上维护的一个版本因为原有的官方团队不在维护了 smashing 使用简单,提供了脚手架同时也有好多人开发了一些 ...

  10. linux下 调试C#代码

    参考两位大神的帖子: https://blog.csdn.net/soband_xiang/article/details/82914195 https://blog.csdn.net/weixin_ ...