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请求的 ...
随机推荐
- 1 认识开源性能测试工具jmeter
典型的性能测试工具主要有2个,Load Runner和jmeter.Load Runner是商业化的,Jmeter是开源的.下面我们认识一下开源性能测试工具jmeter. 1.jmeter是什么? A ...
- Hive SQL测试
在spark的空表test上进行运算,注意结果差异: ,age)) as ages from test group by name;//空 ,age)) as ages from test group ...
- lambda 表达式拼接
类库: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions ...
- json_encode转义中文问题
默认情况下php的 json_decode 方法会把特殊字符进行转义,还会把中文转为Unicode编码形式. 这使得数据库查看文本变得很麻烦.所以我们需要限制对于中文的转义. 对于PHP5.4+版本, ...
- Hibernate基础增删改查语法
1.创建好Hibernate项目,创建好实体类和测试类,如果不会创建Hibernate项目的同学,点此处:http://www.cnblogs.com/zhaojinyan/p/9336174.htm ...
- [5]windows内核情景分析---进程线程
本篇主要讲述进程的启动过程.线程的调度与切换.进程挂靠 进程的启动过程: BOOL CreateProcess ( LPCTSTR lpApplicationName, ...
- 9.if/else/elif
简单的条件是通过使用 if/else/elif 语法创建的.条件的括号是允许的,但不是必需的.考虑到基于表的缩进的性质,可以使用 elif 而不是 else/if 来维持缩进的级别. if [expr ...
- 交替最小二乘ALS
https://www.cnblogs.com/hxsyl/p/5032691.html http://www.cnblogs.com/skyEva/p/5570098.html 1. 基础回顾 矩阵 ...
- jQuery筛选--hasClass(class)和eq(index|-index)
hasClass(class) 概述 检查当前的元素是否含有某个特定的类,如果有,则返回true 参数 class 用于匹配的类名 <!DOCTYPE html> <html> ...
- java集合类图