springboot往error页面注入信息

2021-10-10 From 程序之心 By 程序之心

springboot 提供了默认的 error 页面,路径为 ${server.error.path:${error.path:/error}},但是应用抛出异常的时候,可能会有部分重要的信息没有传递过去,导致 error 页面无法显示。

在 spring 中,提供了 @ControllerAdvice 注解和 @ExceptionHandler 注解,可以用于捕获全局异常。参考 30 个 Spring 常用注解与差异总结

根据 springboot 代码,可以往 request 中添加 attribute 来传递信息给到 error 页面。其中:

  • "javax.servlet.error.status_code" 是 http 状态码;
  • "javax.servlet.error.message" 是错误提示;
  • "javax.servlet.error.request_uri" 是错误地址

最终,实现代码如下:

@ControllerAdvice
public class Exception {
    @ExceptionHandler(MyException.class)
    public void handler(MyException e, HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
          if(ErrorCodeEnum.REQ_NOT_FOUND.name().equals(e.getErrorCode().getCode())){
            request.setAttribute("javax.servlet.error.status_code", 404);
            request.setAttribute("javax.servlet.error.message", e.getErrorCode().getMsg());
            request.setAttribute("javax.servlet.error.request_uri", request.getRequestURI());
        }
        request.getRequestDispatcher("/error").forward(request, response);
    }
}

本文来源:程序之心,转载请注明出处!

本文地址:https://chengxuzhixin.com/blog/article/300299.html

发表感想

© 2016 - 2022 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号