spring - 如何使用 Spring Boot 创建 404 Controller ?

标签 spring error-handling http-status-code-404 spring-boot

我想使用 SpringBoot 返回自定义 404 错误,但我希望能够向其中添加一些服务器端逻辑,而不仅仅是提供静态页面。

<强>1。我关闭了 application.properties

中的默认白标签页面

error.whitelabel.enabled=false

<强>2。我在 resources/templates

下添加了 Thymeleaf error.html

顺便说一句,这是有效的。已提供页面,但未调用任何 Controller 。

<强>3。我创建了一个类 Error 作为“ Controller ”

package com.noxgroup.nitro.pages;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/error")
public class Error {

    @ExceptionHandler
    public String index() {
        System.out.println("Returning Error");
        return "index";
    }

}

不幸的是,我没有在控制台的任何地方看到返回错误打印。

我正在使用带有 Spring Boot 的嵌入式 Tomcat。我见过各种选项,但似乎都不起作用,包括使用 @ControllerAdvice、删除 RequestMapping 等。这两个选项都不适合我。

最佳答案

servlet 容器将在到达 Spring 之前获取 404,因此您需要在 servlet 容器级别定义一个错误页面,该页面转发到您的自定义 Controller 。

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

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

}

关于spring - 如何使用 Spring Boot 创建 404 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897499/

相关文章:

iis - Umbraco的404页?

eclipse - HTTP 状态 404 - 请求的资源 (/ProjectName/) 不可用

java - 在 Spring 中使用 BCryptPasswordEncoder 检索密码盐

java - Spring Security 的编程使用

java - "A component required a bean of type",但是哪一个呢?

javascript - 如果图像正常,为什么和img onerror处理程序一起执行

php - 检测(在自定义错误处理程序中)PHP 错误是否实际上被 @ 抑制了

mysql - Spring 模板: how to execute multiple SQL statements?

ruby-on-rails-3 - 如果失败则恢复 Mongoid

javascript - jQuery 中附加 [object%20Object] 的 JSON 请求