spring boot处理异常的方式有很多种,各自都有不同的优点和缺点,之前看了很多关于spring boot异常处理的博客,把我人都看晕了,越看越糊涂,不知道该用哪种异常处理方式好,最终在一个项目视频教程下看到了一个异常处理的解决方案,觉得挺好用的,在这里分享给大家
处理异常的类
该异常处理的核心是 @ControllerAdvice,@ExceptionHandler,它会拦截所有Controller层的异常
后端部分
自定义异常处理类
package com.jizhu.blog.exceptionHandler;
import...
/**
* 此注解只扫描Controller层的异常
*/
@ControllerAdvice(annotations = Controller.class)
public class ExceptionHander{
/**
* 日志
*/
private static final Logger logger= LoggerFactory.getLogger(ExceptionHander.class);
@ExceptionHandler(Exception.class)
public void exceptionHanders(HttpServletRequest request, Exception e, HttpServletResponse response) throws IOException {
/**
* 记录日志
*/
logger.error("服务器发生异常:"+e.getMessage());
for (StackTraceElement stackTraceElement : e.getStackTrace()) {
logger.error(stackTraceElement.toString());
}
/**
* 根据请求类型处理异常
*/
String xRequestedWith = request.getHeader("x-requested-with");
if("XMLHttpRequest".equals(xRequestedWith)){
/**
* 此请求为Ajax请求
* 使用json格式返回
*/
ObjectMapper mapper =new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),"服务器异常");
}else{
/**
* 正常request请求
* 跳转到500页面
*/
response.sendRedirect(request.getContextPath()+"/500");
}
}
}
该异常处理类的特点就是能够根据请求是否为Ajax来进行不同的处理,服务端代码错误统一跳转自定义的500页面,如果客户端输入路径错误或者资源已经删除那么自动跳转自定义404页面,如果是Ajax请求那么同样也会以Json格式返回。
Controller层页面跳转处理
前端部分
自定义404页面必须按照此目录结构放,resource->templates->error->404.html,这样spring boot才会自动跳转到404页面,自定义500页面就可以随便放了,因为需要在Controller层跳转,不过我个人就跟404.html放在同一级目录了
自定义错误页面目录结构
测试Demo
500错误测试
页面
控制台
日志
404错误测试
页面
Ajax请求测试
页面
控制台
日志
完事儿~