Spring MVC全局的异常处理方式

本文介绍三种Spring MVC中处理异常的方法:使用SimpleMappingExceptionResolver、实现HandlerExceptionResolver接口及使用@ExceptionHandler注解。这些方法有助于简化异常处理逻辑,提高代码的可维护性。

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

在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的。那么如何保证我们处理异常的代码精简且便于维护呢?下面是异常处理几种方式

 

1,使用SimpleMappingExceptionResolver实现异常处理 

applicationContext.xml中配置

	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
  <!-- 定义默认的异常处理页面 -->  
    <property name="defaultErrorView" value="error"></property>  
    <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->  
    <property name="exceptionAttribute" value="ex"></property>  
    <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,页名作为值 --> 
    <property name="exceptionMappings">  
        <props>  
            <prop key="java.lang.Exception">error</prop>  
            <prop key="java.lang.ArithmeticException">arithMeticExcetionError</prop>  
        </props>  
    </property>   
</bean> 


2,实现HandlerExceptionResolver接口实现自己的处理方法,如

public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
		@Override
		public ModelAndView resolveException(HttpServletRequest request,
				HttpServletResponse response, Object handler, Exception ex) { 
		// 添加自己的异常处理逻辑,如日志记录等
							
			return new ModelAndView("exception");
		}
	}

然后配置文件配置

<bean id="exceptionResolver" class="包名.MyHandlerExceptionResolver"/>


3,第三种建立baseController 使用@ExceptionHandler 注解

public class BaseController {
		@ExceptionHandler 
		public String exception(HttpServletRequest request, Exception e) {     //添加自己的异常处理逻辑,如日志记录   
        	request.setAttribute("exceptionMessage", e.getMessage()); // 根据不同的异常类型进行不同处理
        	if(e instanceof SQLException) return "testerror"; else
            return "error"; 
	}	
}
然后让其他的需要使用此异常的Controller继承 BaseController
@RestController
public class ArticleCotroller extends BaseController{
	@RequestMapping("/articles")
	public Object getArticleList(){
		Map<String, Object> params=getPageMap();
		List<ArticleListDto> listDtos=articleService.getArticleList(params);
		int i = 1/0;
		return setResponseMap(CodeMessage.C_SUCCESS, "查询成功", listDtos);
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的窝窝牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值