SpringMVC異常處理

SpringMVC的異常處理:

1.加上標籤:

<mvc:annotation-driven></mvc:annotation-driven>

2.在當前Handler(Controller)中定義由@ExceptionHandler註解修飾的方法,用於處理異常信息!

@ExceptionHandler(value={ArithmeticException.class})
    public ModelAndView exception(){ 
        ArithmeticException e = new ArithmeticException();
        ModelAndView mv=new ModelAndView();
        mv.setViewName("error");
        mv.addObject("exception", e);
        System.out.println("出錯了!");
        return mv;
    }

注意:
1.@ExceptionHandler方法修飾的入參中可以加入Exception類型的參數,該參數即對應發生的異常信息
2.@ExceptionHandler方法的入參中不能傳入Map.若希望把異常信息傳到頁面上,需要使用ModelAndView作爲方法的返回值。
3.@ExceptionHandler 註解定義的方法優先級問題:
例如發 生的是NullPointerException,但是聲明的異常有 RuntimeException 和 Exception,此候會根據異常的最近 繼承關係找到繼承深度最淺的那個 @ExceptionHandler 註解方法,即標記了 RuntimeException 的方法
4.ExceptionHandlerMethodResolver 內部若找不 到@ExceptionHandler 註解的話,會找@ControllerAdvice 中的@ExceptionHandler 註解方法

基於配置的異常處理:
如果希望對所有異常進行統一處理,可以使用 SimpleMappingExceptionResolver,它將異常類名映射爲 視圖名,即發生異常時使用對應的視圖報告異常

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <!-- 指定在在request域中獲取異常信息所需要的key:即ex -->
            <property name="exceptionAttribute" value="ex"></property>
            <!-- 指定異常映射 -->
            <property name="exceptionMappings">
                <props>
                   <!--  由prop標籤的key屬性指定發生異常的全類名,由值指定出現異常去哪個頁面! -->
                    <prop key="java.lang.ArithmeticException">error</prop>
                </props>
            </property>
        </bean>

[1]創建異常類:
如果發生異常,會先在異常類中找是否是異常類中標出的這些異常,如果是,則會在異常類中繼續執行下去;反之,則會報異常。
Exception類:

@ControllerAdvice
public class Exception {
    @ExceptionHandler(value={ArithmeticException.class,NullPointerException.class})
    public ModelAndView exception(){ 

        ModelAndView mv=new ModelAndView();
        mv.setViewName("error");
        //mv.addObject("exception", e);
        System.out.println("出錯了!");
        return mv;
    }
}

[2]註解異常方法:
發生異常首先找在異常方法中是否標出,如果標出,則會執行異常方法;如果沒有,則會報異常信息。如果異常方法和異常類同時存在,會先找本類中的異常方法,如果本類中的異常方法不能解決這個異常,纔會執行異常類。
Controller類:
異常方法:

@ExceptionHandler(value={ArithmeticException.class})
    public ModelAndView exception(){ 
        ArithmeticException e = new ArithmeticException();
        ModelAndView mv=new ModelAndView();
        mv.setViewName("error");
        mv.addObject("exception", e);
        System.out.println("出錯了!");
        return mv;
    }
@RequestMapping(value="/testException")
    public String testException(@RequestParam(value="i")Integer i){
        System.out.println(10/i);
        return "success";
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章