SpringMVC中利用HandlerExceptionResolver完成异常处理
在解决Controller层中的异常问题时,如果针对每个异常处理相对较为繁琐。在SpringMVC中提供了HandlerExceptionResolver用于处理捕获到的异常,从而重新定义返回给前端的数据展示方式:
1,实现HandlerExceptionResolver接口;
2,实现方法resolveException;
3,将自定义类注入到spring中:
若是在普通的web项目中则需要在springmvc的xml文件中手动注入<bean class="com...common.SpringExceptionResolver" />;
而若是在Springboot中直接用全局异常处理器即可(@ControllerAdvice结合@ExceptionHandler(Exception.class))
/** * 自定义异常返回方式 */ @Slf4j public 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均为自定义的异常
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话