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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!