我需要返回 HTTP 404 的自定义错误页面,但代码不起作用。我已经阅读了 stackflow 1 , 2 , 3和不同online + articles但我的情况与那些人完全不同,或者至少我无法弄清楚问题所在。
HTTP Status 404 -
type Status report
message
description The requested resource is not available.
例如,建议在 web.xml 中使用操作名称来处理异常,它可能有效,但我认为这不是一个好的方法。
我使用了以下组合:
1)
@Controller //for class
@ResponseStatus(value = HttpStatus.NOT_FOUND) //for method
2)
@Controller //for class
@ResponseStatus(value = HttpStatus.NOT_FOUND) //for method
@ExceptionHandler(ResourceNotFoundException.class) //for method
3)
@ControllerAdvice //for class
@ResponseStatus(value = HttpStatus.NOT_FOUND) //for method
3)
@ControllerAdvice //for class
@ResponseStatus(HttpStatus.NOT_FOUND) //for method
4)
@ControllerAdvice //for class
@ResponseStatus(value = HttpStatus.NOT_FOUND) //for method
@ExceptionHandler(ResourceNotFoundException.class) //for method
代码
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public String handleBadRequest(Exception exception) {
return "error404";
}
}
最佳答案
如果没有找到处理请求的处理程序,
DispatcherServlet
默认情况下不会引发异常。因此,您需要显式激活它,如下所示:
在 web.xml 中:
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
如果您使用基于注释的配置:
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
在 Controller 建议类中:
@ExceptionHandler
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleExceptiond(NoHandlerFoundException ex) {
return "errorPage";
}
关于spring - Spring MVC中如何通过返回自定义错误页面来全局处理404异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29689742/