社区项目-统一异常处理
一、统一异常处理
• @ControllerAdvice - 用于修饰类,表示该类是Controller的全局配置类。 - 在此类中,可以对Controller进行如下三种全局配置: 异常处理方案、绑定数据方案、绑定参数方案。 • @ExceptionHandler - 用于修饰方法,该方法会在Controller出现异常后被调用,用于处理捕获到的异常。 • @ModelAttribute - 用于修饰方法,该方法会在Controller方法执行前被调用,用于为Model对象绑定参数。 • @DataBinder - 用于修饰方法,该方法会在Controller方法执行前被调用,用于绑定参数的转换器
二、使用步骤
1.代码:
不需要在controller层做任何操作,
@ControllerAdvice(annotations = Controller.class)
public class ExceptionAdvice {
private static final Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);
@ExceptionHandler({Exception.class})
public void handleException(Exception e, HttpServletRequest request, HttpServletResponse response) throws IOException {
logger.error("服务器发生异常: " + e.getMessage());
for (StackTraceElement element : e.getStackTrace()) {
logger.error(element.toString());
}
//异步请求或普通请求
String xRequestedWith = request.getHeader("x-requested-with");
if ("XMLHttpRequest".equals(xRequestedWith)) {
response.setContentType("application/plain;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.write(CommunityUtil.getJSONString(1, "服务器异常!"));
} else {
response.sendRedirect(request.getContextPath() + "/error");
}
}
}
