自定义Whitelabel错误页面时,控制器无法跳转查看

时间:2019-04-24 11:29:19

标签: spring spring-mvc

enter image description here,当我尝试自定义错误页面时,发现网络无法按预期跳转。程序从服务器获得“ 404”响应时,它会正确跳转,但是当获得“ 500”时,它将无法工作。

我尝试交换位置,并且使用不同的html文件,结果始终是相同的,“ 404”部分可以很好地工作,而“ 500”部分则不能。我尝试使用重定向,神奇的事情发生了,它起作用了!你能解释一下吗?

 @Controller("error")

公共类GrobalException实现ErrorController {     //私有静态最终字符串ERROR_PATH =“ / error”;

@RequestMapping(value = "/error")
public String handleError(HttpServletRequest request) {
    Object status=request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
    if(status!=null){
        Integer statuscode=Integer.valueOf(status.toString());
        if(statuscode==HttpStatus.NOT_FOUND.value()){
            return "404";
        }
        else if(statuscode==HttpStatus.INTERNAL_SERVER_ERROR.value()){
            System.out.println("status is "+statuscode+" intern is "+HttpStatus.INTERNAL_SERVER_ERROR.value());
            return "success";//If i change it to "return "redirect:/success", and define new controller for it, that can jump to success.html 
        }
    }
    return "test";
}

@Override
public String getErrorPath() {
    return "/error";
}

}

我应该认为它们是同一回事,为什么我应该使用不同的代码来实现不同的错误代码。

1 个答案:

答案 0 :(得分:0)

您不需要编写复杂的代码。

@Controller
@RequestMapping("/")
public class ErrorController {
  @RequestMapping(value = "404",method = RequestMethod.GET)
  public String Page404(ModelMap model) {
    return "404";
  }
    @RequestMapping(value = "500",method = RequestMethod.GET)
    public String Page500(ModelMap model) {
        return "500";
    }
}

web.xml

    <error-page>
        <error-code>404</error-code>
        <location>/404</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500</location>
    </error-page>

404.jsp

<html>
<body>
<h1>This is custom 404 page.</h1>
</body>
</html>

500.jsp

<html>
<body>
<h1>This is custom 500 page.</h1>
</body>
</html>