接口项目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. Django 之 restframework 解析器源码分析

    解析器分类: 1. JSONPaser ----> 解析 JSON-serialized data (解析JSON序列化的数据) 2.FormParser ---->解析form 表单中 ...

  2. Tomcat内存溢出解决方法

    Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在 ...

  3. Anaconda安装、更新第三方包

    conda和pip简介 conda conda是包及其依赖项和环境的管理工具. 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, F ...

  4. [TJOI2018]最长上升子序列

    Link 动态维护LIS? 观察题目:在第 i 轮操作时,将数字 i 插入 插入的数字是当前最大的 如果答案与上次不同,新的LIS必以 i 结尾 以 i 结尾的LIS无法再伸长(因为比 i 小的都插入 ...

  5. python应用-彩票随机码的输出

    """ 双色球-6个红色球(1-33)和一个蓝色球(1-16) """ from random import randint def sel ...

  6. mysql 的 docker image 使用(官方文档节选)

    1.创建一个 mysql 实例: $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 2.创 ...

  7. 关于Certificate、Provisioning Profile

    Certificate(证书)就是app在打包的时候必须签名,苹果iOS系统在安装app之前会验证Certificate,否则不会通过安装. Provisioning Profile简单来说就是包含A ...

  8. python预课05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)

    结巴分词 import jieba """ pip install jieba 1.精确模式 2.全模式 3.搜索引擎模式 """ txt ...

  9. wordpress下一篇next_post_link函数的使用方法

    我们在用wordpress开发时经常会用到上一篇下一篇的功能,<?php previous_post_link('%link') ?> <?php next_post_link('% ...

  10. XCOPY——目录复制命令

    XCOPY——目录复制命令 1.功能:复制指定的目录和目录下的所有文件连同目录结构. 2.类型:外部命令 3.格式:XCOPY [源盘:]〈源路径名〉[目标盘符:][目标路径名][/S][/V][/E ...