Springmvc Exception

时间:2023-03-08 22:24:57

对于异常处理,大多使用一个共同的异常类统一处理从dao,service,controller层抛出的异常,将页面跳转到共同的error页面。

public class CommonException implements HandlerExceptionResolver {
/** 日志 **/
private Logger logger = LoggerFactory.getLogger(CommonException.class); /** 共同error处理页面 **/
private static final String COMMON_ERROR_PAGE = "/error/error";
/** 共同session超时处理页面 **/
private static final String COMMON_SESSION_PAGE = "/error/session"; /**
* 异常类的统一处理
*/
@Override
public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object obj,
Exception e) {
logger.debug(">>>resolveException(HttpServletRequest req, HttpServletResponse resp, Object obj,Exception e)");
ModelAndView mav = new ModelAndView();
// 默认error处理
mav.addObject("errorMsg", "数据处理异常,请重试或与管理员联系!");
mav.addObject("errorDetailMsg", e.getMessage());
mav.addObject("errorDetailCause", e.getCause());
mav.setViewName(COMMON_ERROR_PAGE);
// session超时处理
if(e instanceof SessionException) {
mav.addObject("errorMsg", "您因长时未操作会话超时,请点击【确定】,重新登录!");
mav.addObject("errorDetailMsg", (SessionException) e).getMsg());
mav.setViewName(COMMON_SESSION_PAGE);
}
logger.debug("<<<resolveException(HttpServletRequest req, HttpServletResponse resp, Object obj,Exception e)");
return mav;
}

注意需要实现 HandlerExceptionResolver 这个接口。

同时注册bean.

<bean class="com.****.CommonException"></bean>

统一异常处理拦截:

**
* description: 统一异常处理
*
* @Autor:DennyZhao
* @Date://
* @Version: 1.0.
*/
@ControllerAdvice
public class ApiExceptionHandler { /** 共同log信息 **/
protected final Logger logger = LoggerFactory.getLogger(ApiExceptionHandler.class); @ExceptionHandler()
@ResponseBody
String handleException(Exception e){
logger.error("未知异常", e);
return ScsErrorCode.ERROR_CODE_SCS_EP9999 + "出现未知异常," + e.getMessage();
}
}