SpringMVC 處理異常的4種方式

jopen 9年前發布 | 41K 次閱讀 SpringMVC Spring MVC Web框架

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