
SpringMVC中利用HandlerExceptionResolver完成异常处理
发布日期:2021-05-09 00:49:37
浏览次数:13
分类:博客文章
本文共 2024 字,大约阅读时间需要 6 分钟。
在解决Controller层中的异常问题时,如果针对每个异常处理相对较为繁琐。在SpringMVC中提供了HandlerExceptionResolver用于处理捕获到的异常,从而重新定义返回给前端的数据展示方式:
1,实现HandlerExceptionResolver接口;
2,实现方法resolveException;
3,将自定义类注入到spring中:
若是在普通的web项目中则需要在springmvc的xml文件中手动注入<bean class="com...common.SpringExceptionResolver" />;
而若是在Springboot中直接用全局异常处理器即可(@ControllerAdvice结合@ExceptionHandler(Exception.class))
/** * 自定义异常返回方式 */@Slf4jpublic class SpringExceptionResolver implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { String url = request.getRequestURL().toString(); String defaultMsg = "System error"; String jsonView = "jsonView"; ModelAndView mv ; if (StringUtils.isEmpty(url)){ return null; } if(url.endsWith(".json") ){ //以.json结尾的请求为ajax请求 if(ex instanceof PermissionException || ex instanceof ParamException){ log.error("unknow ParamException or PermissionException exception , url:"+url,ex); JsonData result = JsonData.error(ex.getMessage()); mv = new ModelAndView(jsonView,result.toMap()); }else { log.error("unknow json exception , url :"+url,ex); JsonData result = JsonData.error(defaultMsg); mv = new ModelAndView(jsonView,result.toMap()); } }else if (url.endsWith(".page")){ //访问页面以.page结尾 log.error("unknow page exception , url:"+url,ex); JsonData result = JsonData.error(defaultMsg); //同样也可以定义返回给前端的错误页面mv = new ModelAndView(); mv.setView("500.html");这样就会直接返回指定的500.html页面了 mv = new ModelAndView(jsonView,result.toMap()); }else{ log.error("unknow exception , url:"+url,ex); JsonData result = JsonData.error(defaultMsg); mv = new ModelAndView(jsonView,result.toMap()); } return mv; }}
注:其中PermissionException 和 ParamException均为自定义的异常
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月15日 15时15分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
2021-05-09
[apue] popen/pclose 疑点解惑
2021-05-09
[apue] getopt 可能重排参数
2021-05-09
移动互联网恶意软件命名及分类
2021-05-09
白话经典算法系列之——直接插入排序的三种实现
2021-05-09
adb shell am 的用法
2021-05-09
PySide图形界面开发(一)
2021-05-09
Android如果有一个任意写入的漏洞,如何将写权限转成执行权限
2021-05-09
三角网格体积计算
2021-05-09
[software development] 需求分析checklist
2021-05-09
现代3D图形编程学习-基础简介(2) (译)
2021-05-09
自动化测试工具
2021-05-09
Github教程(3)
2021-05-09
vue实现简单的点击切换颜色
2021-05-09
vue3 template refs dom的引用、组件的引用、获取子组件的值
2021-05-09
深入浅出mybatis
2021-05-09
Zookeeper快速开始
2021-05-09
RabbitMQ快速开始
2021-05-09
cas客户端流程详解(源码解析)--单点登录
2021-05-09
882. Reachable Nodes In Subdivided Graph
2021-05-09