java之异常统一处理
spring-mvc.xml
<!-- aop -->
<aop:aspectj-autoproxy/>
<beans:bean id="controllerAop" class="com.financial.server.aop.ControllerAOP"/>
<aop:config><!-- 环绕通知 统一捕捉controller方法抛出的异常并进行处理 -->
<aop:aspect id="myAop" ref="controllerAop">
<aop:pointcut expression="@annotation (org.springframework.web.bind.annotation.RequestMapping)" id="target"/>
<aop:around method="handlerControllerMethod" pointcut-ref="target"/>
</aop:aspect>
</aop:config>
controller层拦截处理异常
package com.financial.server.aop; import java.lang.reflect.Method;
import java.util.Map; import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.web.servlet.ModelAndView; import com.financial.server.util.ResultBean; public class ControllerAOP { private static final Logger logger = Logger.getLogger(ControllerAOP.class); public Object handlerControllerMethod(ProceedingJoinPoint pjp) {
long startTime = System.currentTimeMillis();
Object result;
Signature s = pjp.getSignature();
MethodSignature ms = (MethodSignature) s;
Method m = ms.getMethod();
try {
result = pjp.proceed();
logger.info (pjp.getSignature() + "接口用时:" + (System.currentTimeMillis() - startTime) + "毫秒");
} catch (Throwable e) {
result = handlerException(pjp, e, m.getReturnType().getSimpleName());
}
return result;
} private Object handlerException(ProceedingJoinPoint pjp, Throwable e, String returnName) {
e.printStackTrace();
if ("ModelAndView".equals(returnName)) {
ModelAndView mv = new ModelAndView("error");
return mv;
} else if ("ResultBean".equals(returnName)) {
ResultBean result = new ResultBean();
logger.error(pjp.getSignature() + " error ", e);
result.setMsg("服务器异常!请稍后重试!");
result.setCode(result.FAILTRUE);
// 异常这里可以做其他操作,如通知邮件,单独写到某个文件等等。
logger.info(e, e);
logger.error(e.getMessage(), e);
return result;
} else if ("String".equals(returnName)) {
return "error1";
} else {
return "error";
} }
}
测试方法
@RequestMapping("/aa")
public ModelAndView aa() throws Exception{
throw new Exception("aa");
}
@RequestMapping("/bb")
public String bb() throws Exception{
throw new Exception("bb");
}
@RequestMapping("/cc")
@ResponseBody
public ResultBean cc() throws Exception{
throw new Exception("aa");
}
java之异常统一处理的更多相关文章
- 【Java Web开发学习】Spring MVC异常统一处理
[Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...
- 《java中异常和错误》
异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发 ...
- spring @ExceptionHandler注解方式实现异常统一处理
首先,在我们的工程中新建BaseController父类,内容如下: package com.ztesoft.zsmartcity.framework.exception; import java.i ...
- Spring MVC的异常统一处理方法
我们经常需要统一配置项目的异常处理,又希望统一处理异常代码,同时不侵入原有的正常代码.我们可以通过以下三种方式实现统一处理项目的自定义异常. 通过SimpleMappingExceptionResol ...
- JAVA基础——异常详解
JAVA异常与异常处理详解 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1 ...
- java的异常和java web容器的异常
一.java的异常,只要catch住异常了,程序就不会挂,依然会执行catch之后的语句 Java程序发生异常就挂了吗? 为了验证程序不会挂,我写了个例子给大家看看. 测试代码: import jav ...
- 【Java】异常类处理层次
异常处理简介 异常在java的开发中可能没有那么被重视.一般遇到异常,直接上抛,或者随便catch一下处理之后对于程序整体运行也没有什么大的影响.不过在企业级设计开发中,异常的设计与处理的好坏,往往就 ...
- Java ConcurrentModificationException 异常分析与解决方案
Java ConcurrentModificationException 异常分析与解决方案http://www.2cto.com/kf/201403/286536.html java.util.Co ...
- Spring MVC异常统一处理(包括普通请求异常以及ajax请求异常)
通常SpringMVC对异常的配置都是返回某个jsp视图给用户,但是通过ajax方式发起请求,即使发生异常,前台也无法获得任何异常提示信息.因此需要对异常进行统一的处理,对于普通请求以及ajax请求的 ...
随机推荐
- 使用 HTMLTestRunner 模块生成HTML格式的测试报告文件
1.下载HTMLTestRunner.py HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告.HTMLTestRunne ...
- oracle安装---yum.sh
!#/bin/bash yum install binutils* -yyum install compat* -yyum install elfutils* -yyum install gcc* - ...
- Java中基本数据类型byte,short,char,int,long,float,double 取值范围
部分内容转自:java 彻底理解 byte char short int float long double 首先说byte: 这段是摘自jdk中 Byte.java中的源代码: /** * A co ...
- 背景图宽高100%无法无法显示的问题【body设置relative,当前元素absolute】
以下1,2两个关键元素 body{ width:100%; height:100%; position:relative; //1 } .login-form { width: 100%; ...
- 基于jquery ajax的多文件上传进度条
效果图 前端代码,基于jquery <!DOCTYPE html> <html> <head> <title>主页</title> < ...
- 备份软件 FreeFileSync 怎么用
现在,学会使用备份软件对电脑中的重要资料定期进行备份,已经成为许多办公一族的“必修课”.其中,FreeFileSync 作为一款由国外开源社区开发的免费备份软件,由于其支持跨平台(Windows.Li ...
- Hadoop2.6的DataNode启动不了
2016-05-04 18:14:51,990 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting 2016-05-04 ...
- 5.C#释放非托管资源1
释放非托管资源 在介绍释放非托管资源的时候,我觉得有必要先来认识一下啥叫非托管资源,既然有非托管资源,肯定有托管资源. 托管资源指的是.net可以自棕进行回收的资源,主要是指托管堆上分配的内存资源.托 ...
- theos第一次编译成功,记录一下
theos 是github 90444af分支上的,下载设置环境变量 vi /etc/profile. 将/opt/theos/bin加入环境变量 运行nic.pl f 输入11生成工程,一路跳过 最 ...
- Windows服务器时间不同步问题
一台域内的服务器时间不停地被修改,我先向用户收集了一些信息 只有这一台出现此问题,其他服务器均为正常(补充一下,问题快解决完的时候用户告诉我一个重要的消息,就是时间被修改了一段时间后自动会被修改回去) ...