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

时间:2017-04-04 18:42:54

标签: spring spring-mvc spring-boot

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

我正在做的是在我的application.yml:

spring:
   mvc:
    throw-exception-if-no-handler-found: true

然后定义我自己的ResponseEntityExceptionHandler子类,用@ControllerAdvice注释  我被覆盖的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();

^^上面只有一个片段而不是所有的逻辑。

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

1 个答案:

答案 0 :(得分:1)

  

我的工作无法绕过404的默认白标应用页面   错误

基本上,要处理whitelabel错误(404)页面,您只需使用addErrorPages内的customize() EmbeddedServletContainerCustomizer并处理404错误,如图所示下面(您的代码中不需要@ControllerAdvice handleNoHandlerFoundException()方法):

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

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