Spring引导覆盖默认404异常处理

Spring引导覆盖默认404异常处理,spring,spring-mvc,spring-boot,Spring,Spring Mvc,Spring Boot,我已经找到了很多关于这方面的问题和答案,但似乎无论我做什么,我都无法绕过默认的白色标签应用程序页面,出现404个错误。使用启动版本1.4.x 我所做的是在我的应用程序中。yml: spring: mvc: throw-exception-if-no-handler-found: true 然后定义我自己的ResponseEntityExceptionHandler子类,并在其中添加@ControllerAdvice注释 my OverridedhandleNoHandlerFou

我已经找到了很多关于这方面的问题和答案,但似乎无论我做什么,我都无法绕过默认的白色标签应用程序页面,出现404个错误。使用启动版本1.4.x

我所做的是在我的应用程序中。yml:

spring:
   mvc:
    throw-exception-if-no-handler-found: true
然后定义我自己的
ResponseEntityExceptionHandler
子类,并在其中添加
@ControllerAdvice
注释 my Overrided
handleNoHandlerFoundException

    @ControllerAdvice
public class ThisIsNotWorking extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleNoHandlerFoundException(final NoHandlerFoundException ex,
                                                                   final HttpHeaders headers, final HttpStatus status,
                                                                   final WebRequest request) {
        logger.info(ex.getClass().getName());
        final String error = "No handler found for " + ex.getHttpMethod() + " " + ex.getRequestURL();
@ControllerAdvice
公共类ThisNotWorking扩展了ResponseEntityExceptionHandler{
@凌驾
受保护的响应handleNoHandlerFoundException(最终编号HandlerFoundException ex,
最终HttpHeaders标头,最终HttpStatus状态,
最终WebRequest(请求){
logger.info(例如getClass().getName());
final String error=“未找到“+ex.getHttpMethod()+”+ex.getRequestURL()的处理程序”;
^^只是一个片段,而不是所有的逻辑

但当我导航到启动应用程序的错误路径时,我在浏览器中得到了错误的json。我还需要做什么呢?最终我希望以自定义方式为我的应用程序处理这些404

我所做的是,我无法绕过404的默认白标签应用程序页面 错误

基本上,要处理白标签错误(
404
)页面,您只需使用
EmbeddedServletContainerCustomizer
中的
addErrorPages
,并按如下所示处理
404
错误(您不需要
@ControllerAdvice
handleNoHandlerFoundException()
来自代码的方法):


需要记住的一点是,对于错误的URL和数据库中未找到的资源,都可能发生404错误。您知道您遇到的是哪一个错误吗?好的一点,我不想在控制器返回404时捕获异常,但我特别想在您转到未由任何请求映射定义的映射时捕获异常。您是否正在尝试r是否返回json响应,或自定义白色页面错误?我真的希望捕获404并注意到它们试图去哪里,然后将它们重定向到前端应用程序内的页面。您是否需要为此执行任何特殊操作?我可以导航到我提供给ErrorPage的路径,但如果我转到
/myapp/badpath
我仍然会收到whitelabel pagenothing special,您需要确保正在扫描此类的包(
@Componentscan
)通过Spring containerSo我想我在这里找到了我的答案,这就是我正在努力解决的问题,但我会接受你的答案,因为它不适用于我的情况。谢谢,我不确定问题出在哪里,但对我来说很好。你需要有restful服务,同时使用默认的资源处理程序来提供静态资源和炫耀。T无论您试图以何种方式自定义错误/异常处理,默认资源处理程序都将处理404
@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
                                                   "/YOUR_PAGE.html"));
    }
}