spring異常處理基本有3種方式:
1、繼承SimpleMappingExceptionResolver類;
applicationContext.xml中添加
<bean class="cn.px.hq.web.resolver.GenericExceptionResolver">
<property name="order" value="0"></property>
<property name="exceptionMappings">
<props>
<prop key="java.lang.Throwable">error/500</prop>
<prop key="org.apache.shiro.authz.AuthorizationException">error/403</prop>
</props>
</property>
</bean>
或者通過註解@Component實現
實現類GenericExceptionResolver:
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = null;
modelAndView = super.doResolveException(request, response, handler, ex);
if (modelAndView != null) {
Map<String, Object> model = modelAndView.getModel();
model.put("errorCode", exception.getErrorCode().getNumber());
model.put("errorInfo", exception.getErrorInfo());
model.put("data", exception.getProperties());
model.put("message", exception.getMessage());
model.put("stackTrace", exception.getStackTraceAsString()); // 設置異常信息
}
return modelAndView;
}
2、實現接口HandlerExceptionResolver ;
applicationContext.xml中增加以下內容:
<bean id="exceptionHandler" class="cn.basttg.core.exception.實現類"/>
實現類代碼實現:
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
Map<String, Object> model = new HashMap<String, Object>();
model.put("ex", ex);
// 根據不同錯誤轉向不同頁面
if(ex instanceof BusinessException) {
return new ModelAndView("error-business", model);
}else if(ex instanceof ParameterException) {
return new ModelAndView("error-parameter", model);
} else {
return new ModelAndView("error", model);
}
}
3、@ExceptionHandler註解實現;
/** 基於@ExceptionHandler異常處理 */
@ExceptionHandler
public String exp(HttpServletRequest request, Exception ex) {
request.setAttribute("ex", ex);
// 根據不同錯誤轉向不同頁面
if(ex instanceof BusinessException) {
return "error-business";
}else if(ex instanceof ParameterException) {
return "error-parameter";
} else {
return "error";
}
}