异常是一层一层往上抛的,所以只要处理表现层就能满足需求。
springboot自动处理,把要显示的错误网页放在templates/error,自动识别错误
记录日志
spring统一处理:@controlleradvice
//这个组件会扫描所有组件,要做限制->这个注解只去扫描带有controller注解的那些bean
@ControllerAdvice(annotations = Controller.class)
public class ExceptionAdvice {
private static final Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);
//处理异常
//不需要再去其他的controller上加其他的错误,直接在这里配置就可以处理所有的错误
@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");
//只有异步请求才会返回XML
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");
}
}
}