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请求的 ...
随机推荐
- nginx --反向代理配置文件
配置文件如下图 server { listen 8080; server_name 0.0.0.0;//这里可以配置相应域名 root /www/facei; index index.html i ...
- C++了解free和delete
(转自:http://www.cnblogs.com/mrye/archive/2012/09/01/2667079.html) void MyMethod1() { using namesp ...
- abap 通过importing 和 exporting 调用其它函数
1:其它函数的(输入或输出)参数名都在=号左边.
- Mongodb 基础 数据导入导出和用户管理
数据导出 导出命令使用方式 mongoexport---->csv/json使用 参数: -d 库名 -c 表名 -f field1,field2....列名 -q 查询条件 -o 导出文件名 ...
- trie字典树
---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 #include <bits/stdc++.h> usin ...
- Elasticsearch5.x创建索引(Java)
索引创建代码使用官方给的示例代码,我把它在java项目里实现了一遍. 官方示例 1.创建索引 /** * Java创建Index */ public void CreateIndex() { int ...
- centos make error: fatal error: curses.h: No such file or directory
yum install ncurses.x86_64 yum install ncurses-devel.x86_64 yum install ncurses-libs.x86_64 yum inst ...
- iOS - (多图上传已封装)
/*** 上传带图片的内容,允许多张图片上传(URL)POST** @param url 网络请求地址* @param images ...
- LeetCode35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...
- <8>Cocos Creator组件开发cc.Component
1.组件简介 组件是Cocos Creator的主要构成,渲染(场景显示内容).逻辑.用户输入反馈.计时器等等几个方面都是由组件完成的.根据Cocos Creator的总体架构,组件和节点配合完成游戏 ...