SpringMVC 處理異常的4種方式
springmvc處理異常有三種方式:
1.在一個controller中定義一個方法,用@ExceptionHandler注解標注。(優先級最高)
@ExceptionHandler
public ModelAndView handleException(Exception exception){
ModelAndView mv = new ModelAndView("error/500");
mv.addObject("ex",exception);
return mv;
}或者
@ExceptionHandler
public String handleException(Exception exception){
return "error/500";
}2.全局異常設置(優先級次之)
<!-- 將Controller拋出的異常轉到特定View,異常映射處理器 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 定義異常處理頁面用來獲取異常信息的變量名,默認名為exception -->
<!--<property name="exceptionAttribute" value="ex"></property>-->
<property name="exceptionMappings">
<props>
<prop key="java.lang.Throwable">error/500</prop>
</props>
</property>
</bean>3.自定義異常處理(優先級次之)
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
System.out.println("自定義異常處理器");
logger = LoggerFactory.getLogger(ex.getClass());
ResponseStatus responseStatus = AnnotationUtils.getAnnotation(ex.getClass(), ResponseStatus.class);
ModelAndView modelAndView = new ModelAndView("error/500");
//自定義的異常
if (responseStatus != null) {
modelAndView.setViewName("error/" + responseStatus.value().value());
} else {
//其他異常,做一些其他的處理,如發送錯誤報警郵件,記錄日志
logger.error(ex.getMessage(), ex);
}
return modelAndView;
}4.自定義一個異常類,繼承RunTimeException(優先級最低)
@ResponseStatus(value = HttpStatus.NOT_FOUND,reason = "No such resource")
public class NotFoundException extends RuntimeException {
}</pre>
當拋出我們自定義的異常時,就會構造出相應的狀態碼,一般我們還是設置SimpleMappingExceptionResolver,來進行統一跳轉到錯誤頁面。
最佳實踐:還是用全局的SimpleMappingExceptionResolver最好,在jsp里面寫日志,當需要進行細粒度的控制時,還是自定義異常解析器為好,其他的自我感覺不好用!如有不正確的,歡迎指正!
來自:http://zxy-920823.iteye.com/blog/2187549
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!