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均为自定义的异常

 

上一篇:JSR303完成validate校验并编写BeanValidator工具类
下一篇:简单完成Excel导出

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月15日 15时15分04秒