springMVC 全局異常處理


早期對於異常的全局處理是在配置中寫的,如下:

<!-- 全局異常配置 start -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">errors/error</prop>
<prop key="java.lang.Throwable">errors/err</prop>
</props>
</property>
<property name="statusCodes">
<props>
<prop key="errors/error">500</prop>
<prop key="errors/404">404</prop>
</props>
</property>
<!-- 設置日志輸出級別,不定義則默認不輸出警告等錯誤日志信息 -->
<property name="warnLogCategory" value="WARN"></property>
<!-- 默認錯誤頁面,當找不到上面mappings中指定的異常對應視圖時,使用本默認配置 -->
<property name="defaultErrorView" value="errors/error"></property>
<!-- 默認HTTP狀態碼 -->
<property name="defaultStatusCode" value="500"></property>
</bean>
<!-- 全局異常配置 end -->

但現在spring3.0注解很方便強大,所以更多的開發者都傾向於用注解來代替原來繁瑣的配置,而對於異常也有相應的注解,我個人並不覺得在配置文件中配置全局異常很麻煩,如果整個項目都用了注解,而你再用配置就顯得不倫不類,所以就用一個簡單的方法來代替。寫一個公共的controller,用@ExceptionHandler來攔截異常,然后此controller被其他controller繼承,這樣就用很少的代碼解決異常攔截的問題,公共controller代碼如下:
@Controller
public class ExceptionHandlerController {
@ExceptionHandler(RuntimeException.class)
public String operateExp(RuntimeException ex,HttpServletRequest request){
System.out.println("this is for test");
//mod.addAttribute("err", ex.getMessage()); //ExceptionHandler處理異常時,Model,是不能用的,否則會不起作用,這里用了HttpServletRequest
request.setAttribute("err", ex.getMessage());
return "public/error";
}
}


注意!

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



 
  © 2014-2022 ITdaan.com 联系我们: