接口项目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 ...
随机推荐
- wentaolovesmeng.club
wentaolovesmeng.club wentaostudy.club
- Example-based Machine Learning是什么?
参考:https://christophm.github.io/interpretable-ml-book/proto.html EML简介 Example-based Machine Learnin ...
- Python线程join和setDaemon
看一下线程的setDaemon()方法 import time import threading import ctypes import inspect def sayHello(): for i ...
- spring-boot子模块打包的jar中去掉BOOT-INF文件夹
1.spring-boot maven打包,一般pom.xml文件里会加 <plugin> <groupId>org.springframework.boot</grou ...
- 关于 " i=i++"是否等价于"i=i+1"的问题探讨 -Java版/C版
如题 (总结要点) 假设i=1 ,那么 i=i++ 的结果也就是2, 对吗? 不对,是1. -总结如下: 测试过程如下: 1.java版 public class Test { public stat ...
- 20180418模拟赛T1——Seq
Seq (seq.cpp/c/pas) 题目描述 Description 木吉要去征讨VAN様,所以他现在需要从他身边的人中选出若干位陪同.现在有\(n\)个人站成一行,木吉要从其中选出\(2\)批在 ...
- python 连接 redis cluster 集群
一. redis集群模式有多种, cluster模式只是其中的一种实现方式, 其原理请自行谷歌或者百度, 这里只举例如何使用Python操作 redis cluster 集群 二. python 连接 ...
- windows下的批处理bat文件和Linux下的shell文件的互相转换
shell(Linux.Solaris) bat(windows) 含义 # rem 注释行 /[directory]/[directory]/.../[directory]/ [disk]:\[di ...
- mr-jobhistory-daemon.sh 查看mr的历史任务
这个脚本的服务是实现web查看作业的历史运行情况.有些情况下,作业运行完了,在web端就无法查看运行情况. 可以通过开启这个的守护进程来达到查看历史任务. 启动命令为 mr-jobhistory-da ...
- IE浏览器兼容性问题输出
1.时间函数 var startTime=new Date(a); var endTime=new Date(b); 如果a,b的时间格式是:“2017-08-01,需要将格式转换成“2017/08/ ...