对于异常处理,大多使用一个共同的异常类统一处理从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:2019/8/26
 * @Version: 1.0.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();
    }
}

 

posted on 2018-02-26 13:49  zhaoqiang1980  阅读(169)  评论(0编辑  收藏  举报