接口项目servlet的一种处理方式,将异常返回给调用者【我】
接口项目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的一种处理方式,将异常返回给调用者【我】的更多相关文章
- class类名在webpack项目中的两种引用方式
一.问题描述 在项目工程中,我们通常既用到css module,也用到普通的less文件引用方式,代码及webpack配置如下,运行时,发现只有css module起作用,如何让两者都起作用呢? // ...
- Servlet的三种实现方式
A: 实现Servlet接口 B: 继承GenericServlet C: 继承HttpServlet,它是对Http协议进行了封装
- Spring-Aop的两种代理方式
Spring-Aop两种代理方式: 1.JDK动态代理:用于目标类实现了接口: 2.Cglib动态代理:用于目标类没有实现接口: spring会依据目标类是否实现接口来选择使用哪种代理方式(目标类:相 ...
- Web---创建Servlet的3种方式、简单的用户注册功能
说明: 创建Servlet的方式,在上篇博客中,已经用了方式1(实现Servlet接口),接下来本节讲的是另外2种方式. 上篇博客地址:http://blog.csdn.net/qq_26525215 ...
- 在web项目中获取ApplicationContext上下文的3种主要方式及适用情况
最近在做web项目,需要写一些工具方法,涉及到通过Java代码来获取spring中配置的bean,并对该bean进行操作的情形.而最关键的一步就是获取ApplicationContext,过程中纠结和 ...
- servlet三种实现方式之三通过继承HttpServlet开发servlet
servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第三种: import java.io.*; i ...
- Servlet三种创建方式
直接实现 Servlet 接口不太方便,所以 Servlet 又内置了两个 Servlet 接口的实现类(抽象类),分别为 GenericServlet 和 HttpServlet,因此,创建 Ser ...
- 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 ...
- SpringBoot整合Servlet的两种方式
SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...
随机推荐
- Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置
Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义站点主页面 [root@node101.yi ...
- Go入门:创建第一个Go工程
前言 我是一名iOS开发. 因为公司后台都用的Go. 因为对服务端不了解. 所以想自己学习学习. 环境 因为自己的电脑是mac.然后在阿里云买的是centOS的服务器. 所以下面搭建的环境都是在cen ...
- Gym - 100962F: Frank Sinatra (树上莫队+bitset)
题意:给定一棵树,带边权.然后Q次询问,每次给出(u,v),求这个路径上最小的未出现的边权. 思路:树上莫队,求mex可以用分块或者bitset,前者可能会快一点. 莫队过程:求出欧拉序,即记录d ...
- "<<"和“>>”运算
- SpringCloud断路器(Hystrix)和服务降级案列
断路器(Hystrix) 为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自 ...
- BZOJ 3048: [Usaco2013 Jan]Cow Lineup 双指针
看到这道题的第一个想法是二分+主席树(好暴力啊) 实际上不用这么麻烦,用一个双指针+桶扫一遍就行了 ~ code: #include <bits/stdc++.h> #define N 1 ...
- SQL练习题 51题 一刷
Student表: select * from student; 课程表Course: select * from course; 教师表teacher: select * from teacher; ...
- 网络命令——write、wall、ping、ifconfig、mail
1.write命令: 前提:用户必须在线: (1)向zhb用户发送信息: (2)用户收到信息: CTRL+D结束会话. 2.wall(发送广播信息,即给在线的所有用户发送信息) 管理员发送消息(自己可 ...
- ent 基本使用八 索引
我们可以在ent 的schema 中定义index 可以方便的控制数据约束,使用索引可以加速我们的访问以及数据的唯一性处理 配置字段索引 多字段索引 package schema import ( ...
- A1139 | 玩成模拟题的DFS
考试的时候有思路了,但是没写完.这题起码要40min写,思路太诡异了. 刚刚写了一段,只过了一个case,得了18分,还行.明日再战. #include <stdio.h> #includ ...