Spring Boot描述

错误总是会发生的,那些在生产环境里最健壮的应用程序偶尔也会遇到麻烦。虽然减小用户遇到错误的概率很重要,但让应用程序展现一个好的错误页面也同样重要。Spring Boot自动配置的默认错误处理器会查找名为error的视图,如果找不到就用默认的白标错误视图,如下图所示。因此,最简单的方法就是创建一个自定义视图,让解析出的视图名为error。

【20180924】SpringBoot返回通用错误页面 - 图1

方案一:实现ErrorController这个基类

  1. @RestController
  2. @RequestMapping("/error")
  3. public class BaseErrorPage implements ErrorController {
  4. @Override
  5. public String getErrorPath() {
  6. return "自定义的错误页面";
  7. }
  8. @RequestMapping
  9. public String error() {
  10. return getErrorPath();
  11. }
  12. }

方案二:使用注解@ControllerAdvice

  1. //来自他山之石,未实际测试
  2. @ControllerAdvice
  3. public class BizException {
  4. private static final Logger logger = LoggerFactory.getLogger(BizException.class);
  5. /**
  6. * 运行时异常
  7. * @param exception
  8. * @return
  9. */
  10. @ExceptionHandler({ RuntimeException.class })
  11. @ResponseStatus(HttpStatus.OK)
  12. public ModelAndView processException(RuntimeException exception) {
  13. logger.info("自定义异常处理-RuntimeException");
  14. ModelAndView m = new ModelAndView();
  15. m.addObject("exception", exception.getMessage());
  16. m.setViewName("error/500");
  17. return m;
  18. }
  19. /**
  20. * Excepiton异常
  21. * @param exception
  22. * @return
  23. */
  24. @ExceptionHandler({ Exception.class })
  25. @ResponseStatus(HttpStatus.OK)
  26. public ModelAndView processException(Exception exception) {
  27. logger.info("自定义异常处理-Exception");
  28. ModelAndView m = new ModelAndView();
  29. m.addObject("exception", exception.getMessage());
  30. m.setViewName("error/500");
  31. return m;
  32. }
  33. }

方案一:测试效果

【20180924】SpringBoot返回通用错误页面 - 图2

参考资料