Spring : 默认 html 错误页面无法正常显示?

Spring : Default html error page is not properly displayed?

当出现 404 、 406 等错误时,我想将我的网站重定向到默认错误页面。我按照一个示例在控制器中编写了以下方法。

@Controller
public class HomeController {
private static final String PATH = "/error-page";

        public String getErrorPath() {
            return PATH;
        }

        @RequestMapping(method=RequestMethod.GET, value=PATH, produces="text/plain")
        @ResponseBody
        public Map<String, Object> handleGet(HttpServletRequest request) {

            Map<String, Object> map = new HashMap<String, Object>();
            map.put("status", request.getAttribute("javax.servlet.error.status_code"));
            map.put("reason", request.getAttribute("javax.servlet.error.message"));

            return map;
        }

        @RequestMapping(method=RequestMethod.POST, value=PATH, produces="text/plain")
        @ResponseBody
        public Map<String, Object> handlePost(HttpServletRequest request) {

            Map<String, Object> map = new HashMap<String, Object>();
            map.put("status", request.getAttribute("javax.servlet.error.status_code"));
            map.put("reason", request.getAttribute("javax.servlet.error.message"));

            return map;
        }
}

在上述路径中有一个html页面作为错误-page.html。虽然我没有得到任何错误,但我无法在收到错误时显示此错误页面。而是显示通常的错误消息。这里的问题是什么?

非常感谢任何帮助。

你必须重定向到其他控制器
例如 return "redirect:/controllerPath".
之后,在那个特定的控制器中,您应该编写代码来加载 require jsp 页面。

@RequestMapping("/controllerPath")
public String loadErrorPage(){
 return "errorPage";
}

在你的案例中,我没有看到任何捕获错误的方法,你怎么会有这个方法

 public String getErrorPath() {
            return PATH;
        }  

如果此方法在错误发生后的某个时刻被调用,请这样做

 public String getErrorPath() {
            return "redirect:"+PATH;
        }

希望这对您有所帮助。

我不知道“...显示通常的错误消息”是否是指白标错误页面。但是如果你想停用它并显示你自己的错误页面,你必须输入你的 application.properties 或 yml:

server.error.whitelabel.enabled=false

然后像这样添加一个ErrorController

@Controller
public class MyErrorController implements ErrorController {

  private static final String PATH = "/error";

  public MyErrorController() {}

  @RequestMapping(value = PATH)
  public ModelAndView handleAllException() {
    ModelAndView modelAndView = new ModelAndView("error_template");
    return modelAndView;
  }

  @Override
  public String getErrorPath () {
    System.out.println("-- Error Page GET --");
    return "error";
  }

}