在解决Controller层中的异常问题时,若是针对每一个异常处理相对较为繁琐。在SpringMVC中提供了HandlerExceptionResolver用于处理捕获到的异常,从而从新定义返回给前端的数据展现方式:html
1,实现HandlerExceptionResolver接口;前端
2,实现方法resolveException;web
3,将自定义类注入到spring中:ajax
如果在普通的web项目中则须要在springmvc的xml文件中手动注入<bean class="com...common.SpringExceptionResolver" />;spring
而如果在Springboot中直接用全局异常处理器便可(@ControllerAdvice结合@ExceptionHandler(Exception.class))json
/** * 自定义异常返回方式 */ @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均为自定义的异常mvc