springMVC 异常统一处理类

来源:互联网 发布:protgresql和mysql 编辑:程序博客网 时间:2024/05/29 19:51
public class ExceptionResolver implements HandlerExceptionResolver {private static final Logger LOG = Logger.getLogger(ExceptionResolver.class);private static final String DEFAULT_EXCEPTION_VIEW = "exception/exception";@Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {if (ex != null) {ex = adaptException(ex, request);if (TempleConfigContext.getCurrentRequestType() == TempleConfigContext.AJAX_REQUEST_TYPE) {return handlerAjax(request, response, ex);} else {return handlerDefault(request, response, handler, ex);}}return new ModelAndView();}private BusinessException adaptException(Exception ex,HttpServletRequest request) {if (ex.getClass() != BusinessException.class) {LOG.error(LogUtil.getLogStr(request), ex);return new BusinessException(CommonStateEnum.BAD_GATEWAY, ex);}BusinessException tempEx = (BusinessException) ex;if (tempEx.getException() != null) {LOG.warn(LogUtil.getLogStr(request), tempEx);} else {LOG.warn(tempEx.getMessage() + LogUtil.getLogStr(request));}return tempEx;}private ModelAndView handlerAjax(HttpServletRequest request,HttpServletResponse response, Exception ex) {PrintWriter out = null;try {out = response.getWriter();response.setCharacterEncoding(Constant.ENCODING);response.setStatus(((BusinessException) ex).getCode());out.println(((BusinessException) ex).getJSONString());out.flush();} catch (Exception e) {LOG.error(LogUtil.getLogStr(request), e);} finally {out.close();}return new ModelAndView();}private ModelAndView handlerDefault(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {response.setStatus(HttpStatus.OK.value());Map<String, Object> map = ((BusinessException) ex).getMap();for (Map.Entry<String, Object> each : map.entrySet()) {request.setAttribute(each.getKey(), each.getValue());}return new ModelAndView(DEFAULT_EXCEPTION_VIEW);}}

0 0