@Component
public class ExceptionHandler implements HandlerExceptionResolver {
private Logger logger = LoggerFactory.getLogger(ExceptionHandler.class);
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
if (handler instanceof HandlerMethod) {
ResponseBody responseBody = ((HandlerMethod) handler).getMethod().getAnnotation(ResponseBody.class);
if (responseBody != null) {
handlerResponseBody(response, ex);
} else {
ModelAndView mav = new ModelAndView("/WEB-INF/content/exception/error.jsp");
mav.addObject("exception", ex);
return mav;
}
}
return null;
}
private void handlerResponseBody(HttpServletResponse response, Exception ex) {
logger.error(String.format("EXCEPTION_HANDLE PARAM=%s", parseRequest(WebContext.getRequest())), ex);
PrintWriter printWriter = null;
response.setCharacterEncoding("utf-8");
response.setContentType("text/plain;charset=UTF-8");
try {
printWriter = response.getWriter();
printWriter.write(StringUtils.defaultIfEmpty(ex.getMessage(), "系统出错"));
} catch (IOException e) {
logger.error("EXCEPTION_HANDLE_FAILED", e);
} finally {
IOUtils.closeQuietly(printWriter);
}
}
/**
* 将request中参数封装成Map
*
* @param request
* @return
*/
protected Map<String, String> parseRequest(HttpServletRequest request) {
Map<String, String> params = new HashMap<>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
params.put(name, valueStr);
}
return params;
}
}
全局异常捕获
最新推荐文章于 2022-11-19 19:05:41 发布