@Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) { // log记录异常 LOGGER.error(e.getMessage(), e); // 非控制器请求照成的异常 if (!(handler instanceof HandlerMethod)) { return new ModelAndView("error/500"); } HandlerMethod handlerMethod = (HandlerMethod) handler; if (WebUtils.isAjax(handlerMethod)) { Result result = new Result(); result.setMsg(e.getMessage()); MappingJackson2JsonView view = new MappingJackson2JsonView(); view.setObjectMapper(jacksonObjectMapper); view.setContentType("text/html;charset=UTF-8"); return new ModelAndView(view, BeanUtils.toMap(result)); } // 页面指定状态为500,便于上层的resion或者nginx的500页面跳转,由于error/500不适合对用户展示 // response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return new ModelAndView("error/500").addObject("error", e.getMessage()); }
@Override public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL)); HttpStatus status = getStatus(request); response.setStatus(status.value()); MappingJackson2JsonView view = new MappingJackson2JsonView(); view.setObjectMapper(JsonUtil.getInstance()); view.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); return new ModelAndView(view, body); }