单位有一个在线平台,由于时间原因可能今天写的代码,晚上跟新至服务器,明天就可能很多人用。而程序员不可能考虑的十分周全,对于程序抛出的异常无法及时的查看(只有老板能远程到服务器查看tomcat的堆栈消息),现在我们将异常消息放到json字符串里面,方便程序员F12查看.
实现原理就是:我们平时在eclipse里面看到如 IOException,ClassCastException 的堆栈消息,实际上是java通过io流打印到控制台上的。如果我们能将io流的信息转成string就能不远程服务器地查看异常堆栈。方法如下:
/**
* 合并考试
* @param examName
* @param oldExamIds
* @return
* @throws IOException
*/
@RequestMapping(value="/combineExam")
@ResponseBody
public Object combineExam(String examName,String oldExamIds,String schoolClassId,String termId,String userId,String CourseNum,String isSee) throws IOException{
String return_code = "SUCCESS";
String return_msg = "试卷合成成功";
Map<String,Object> map = new HashMap<String,Object>();
String oldExamNames = banzhurenService.getExamNameStr(oldExamIds);
//先查询已经传来两个试卷的试卷名称
if(oldExamNames.indexOf("(合卷)")>0){
return_code="fail1";
return_msg = "已经合并的试卷无法在进行合并";
map.put("return_code", return_code);
map.put("return_msg", return_msg);
return map;
}
try {
banzhurenService.modifyCombineExam(examName, oldExamIds,schoolClassId,termId,userId,CourseNum,isSee);
} catch (Exception e) {
ByteArrayOutputStream buf = new java.io.ByteArrayOutputStream();
e.printStackTrace(new java.io.PrintWriter(buf, true));
String expMessage = buf.toString();
buf.close();
map.put("return_code", "exception");
map.put("return_msg", expMessage);
}
return map;
}
这样通过 ajax的回调函数,将expMessage写到阅览器的console(原来错误地以为fail函数会在捕获异常时执行=。=,fail函数实际会在程序抛异常或者网络出错时执行)
$.ajax({
type:'POST',
async: false,
url:'/combineExam?examName='+newName+'&oldExamIds='+tempBox+'&schoolClassId='+schoolClassId+'&termId='+termId+'&userId='+userId+'&CourseNum='+CourseNum+'&isSee='+isSee,
success:function(data){
if(data.return_code=='fail1'){
alert(data.return_msg);
}else if(data.return_code=='exception'){
alert("程序异常请联系管理员");
console.log(data.return_msg);
}else{
alert(data.return_msg);
}
},
fail:function(data){
alert(data.return_msg);
}
});