Spring Boot 實現自定義錯誤頁面
阿新 • • 發佈:2018-11-19
sprin 支援實現ErrorController 來自定義錯誤頁面
下面是具體程式碼的實現
@Controller public class CustomErrorController implements ErrorController { @Autowired private ErrorAttributes errorAttributes; private final static String ERROR_PATH = "/error"; @Override public String getErrorPath() { return ERROR_PATH; } @RequestMapping(value = ERROR_PATH, produces = "text/html") public ModelAndView errorHtml(HttpServletRequest request) { Map<String, Object> map = getErrorAttributes(request, false); ModelAndView mav =new ModelAndView("error/error", map); return mav; } @RequestMapping(value = ERROR_PATH) @ResponseBody public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request)); HttpStatus status = getStatus(request); return new ResponseEntity<>(body, status); } private boolean getTraceParameter(HttpServletRequest request) { String parameter = request.getParameter("trace"); if (parameter == null) { return false; } return !"false".equals(parameter.toLowerCase()); } private HttpStatus getStatus(HttpServletRequest request) { Integer statusCode = (Integer) request .getAttribute("javax.servlet.error.status_code"); if (statusCode != null) { try { return HttpStatus.valueOf(statusCode); } catch (Exception ex) { } } return HttpStatus.INTERNAL_SERVER_ERROR; } private Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) { RequestAttributes requestAttributes = new ServletRequestAttributes(request); Map<String, Object> map = this.errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace); String URL = request.getRequestURL().toString(); map.put("URL", URL); return map; } }
需要說明的是,如果使用了controlleradvice 註解實現了全域性異常控制,那麼自定義錯誤頁面將不會起作用
github url: 自定義錯誤頁面