springmvc全局异常处理

本文介绍两种Spring MVC全局异常处理方法:一是通过继承HandlerExceptionResolver并重写resolveException方法;二是利用@ControllerAdvice配合@ExceptionHandler注解处理异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">最近使用shiro做个项目,也包括几个万精油框架spring、mybatis</span>

其实用springmvc来实现全局异常处理我在一起的学习demo中也用到了,今天因为有些地方不是那么清晰了,所以干脆写成博客,记录下来。

用springmvc实现全局异常处理我知道的有两种方式:

1、继承HandlerExceptionResolver实现个自定义的全局异常处理器,重写resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) 

有4个参数,第一个(请求当前的HTTP请求)、第二个(响应当前的HTTP响应)、第三个(处理程序执行处理程序)、第四个(抛出的异常

就是当你的程序抛出异常时,会回调这个方法。我们可以根据Exception的类型做出不同的处理

if(ex instanceof CustomException){
<span style="white-space:pre">	</span>System.out.println("这是自定义异常");
}ielse if(ex instanceof Exception){
<span style="white-space:pre">	</span>System.out.println("这是系统异常");
}
最后这个方法返回一个ModelAndView 可以把错误信息显示在页面上

要spring知道我们自定义了这个全局异常处理器只需在 spring配置文件中加入这个bean

<bean class="com.zzger.CustomHandlerExceptionResolver"/>

2、使用@ExceptionHandler注解来处理异常,我也非常喜欢这种方式,最重要的一点是它可以返回任何东西,不只是一个ModelAndView,可以是json等等..

可以在我们自己的controller中的方法上加上这个注解

<span style="white-space:pre">	</span>@ExceptionHandler(CustomException.class)
	@ResponseBody
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public MessageVo CustomException(CustomException ex){
		MessageVo vo = new MessageVo();
		vo.setStatus(ex.getStatus());
		vo.setMessage(ex.getMessage());
		return vo;
	}
	
这是我的一个示例
@ExceptionHandler里的参数是你想处理那个异常的class,上面的代码意思就是这个方法会处理所有抛出CustomException的异常
<pre name="code" class="java">@ResponseBody是把返回值按json输出
@ResponseStatus是修改此次的http响应码


然后今天就有一个地方忘记了

我把所以的ExceptionHandler单独放到了一个Controller中,可是出现异常的时候没有效果,原来我以前是把其他controller继承此Controller,所以才有效果

不过spring3.2之后提供了一个注解@ControllerAdvice,可以把当前的@ExceptionHandler在所以的@RequestMapping方法上都有效哦



嗯,因为我现在喜欢用ajax来和后台进行交互,所以第二种方式处理异常真是太棒了,写安卓的时候同样如此


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值