springmvc全局異常處理


對於springmvc全局異常處理有三種方式,
1.使用SimpleMappingExceptionResolver實現異常處理
2.實現HandlerExceptionResolver 接口自定義異常處理器
3.使用@ExceptionHandler注解實現異常處理

第一種方式優缺點:
    集成簡單、有良好的擴展性、對已有代碼沒有入侵性等優點,但該方法僅能獲取到異常信息,若在出現異常時,對需要獲取除異常以外的數據的情況不適用。

第二種方式優缺點:
    具有集成簡單、有良好的擴展性、對已有代碼沒有入侵性等優點,同時,在異常處理時能獲取導致出現異常的對象,有利於提供更詳細的異常處理信息。

第三種方式優缺點:
    具有集成簡單、不需要附加Spring配置等優點,但該方法對已有代碼存在入侵性加上注解,在異常處理時不能獲取除異常以外的數據。

我比較喜歡第二種方式,對代碼沒有侵入性,而且能靈活操作各種異常信息.實現方式見下面的代碼.
上面三種方式具體可看:http://cgs1999.iteye.com/blog/1547197

首先在spring配置文件中添加該異常處理的bean:

  <bean id="exceptionHandler" class="com.xxx.xxx.exception.MyExceptionHandler"/>

該bean的實現:

package com.xxx.xxx.exception;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
* spirngmvc自帶的全局異常處理類,
* 當業務邏輯拋出異常時都會被該類攔截並進行處理.
*
* @Author xxx
* @Version 1.0
* @see
*/

public class MyExceptionHandler implements HandlerExceptionResolver {

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
Map<String, Object> model = new HashMap<String, Object>();
model.put("ex", ex);
ex.printStackTrace();//打印異常信息
// 根據不同錯誤轉向不同頁面
if (ex instanceof CSRFException) {//受到csrf攻擊
return new ModelAndView("/errorPage/error", model);
}
if (ex instanceof BusinessException) {//業務邏輯處理出錯
return new ModelAndView("errorPage/businessError", model);
} else if (ex instanceof ParameterException) {//參數處理出錯。
return new ModelAndView("errorPage/parameterError", model);
} else { //其他數據類型錯誤
return new ModelAndView("errorPage/error", model);
}
}
}

當存在異常時,如果業務代碼無法處理,那么就可以拋出讓springmvc進行全局處理. 避免將大量異常代碼侵入到業務代碼中導致無法維護的后果.


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com