我有一个简单的Spring MVC应用程序,我想在其中使用@ControllerAdvice
处理所有未Map的url。
@ControllerAdvice
public class ExceptionHandlerController {
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(NoHandlerFoundException.class)
public String handle404() {
return "exceptions/404page";
}
}
尽管如此,每次都得到白标错误页。
我尝试使用RuntimeException.class
、HttpStatus.BAD_REQUEST
并使用NoHandlerFoundException
扩展类,但没有使用。
有什么建议吗?
3条答案
按热度按时间goqiplq21#
要使其工作,您需要设置DispecherServlet上的
throwExceptionIfNoHandlerFound
属性。您可以使用以下命令来完成此操作:application.properties
文件中,否则请求将始终被转发到默认servlet,并且将抛出NoHandlerFoundException。问题是,即使使用这种配置,它也不起作用。
请注意,如果使用org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,那么请求将始终被转发到默认的servlet,并且在这种情况下不会抛出NoHandlerFoundException。
由于Sping Boot 默认使用
org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler
,因此您必须使用自己的WebMvcConfigurer
覆盖它:当然,在您的情况下,上面的类可能会更加复杂。
f8rj6qna2#
另一种方法是
ErrorController
11dmarpk3#
在application.properties中添加以下行
如果未找到处理程序则抛出异常=真
和**@启用WebMvc**(带有**@控制器建议**),注意:在handleNoHandlerFoundException方法上添加@Override,这对我很有效!