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";
}
}
当出现 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";
}
}