public class ExceptionResolver implements HandlerExceptionResolver {
private static final Logger LOG = Logger.getLogger(ExceptionResolver.class);
private static final String DEFAULT_EXCEPTION_VIEW = "exception/exception";
@Override
public 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);
}
}
springMVC 异常统一处理类
最新推荐文章于 2022-04-26 14:10:16 发布