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>
</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 {
}
當拋出我們自定義的異常時,就會構造出相應的狀態碼,一般我們還是設置SimpleMappingExceptionResolver,來進行統一跳轉到錯誤頁面。
最佳實踐:還是用全局的SimpleMappingExceptionResolver最好,在jsp里面寫日志,當需要進行細粒度的控制時,還是自定義異常解析器為好,其他的自我感覺不好用!如有不正確的,歡迎指正! ?
|
新聞熱點
疑難解答