在解决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均为自定义的异常
来源:https://www.cnblogs.com/bbgs-xc/p/10722930.html