java - 为什么我的 spring boot 错误 Controller 不工作?

标签 java spring-mvc spring-boot error-handling

我有一个简单的 spring boot web 应用程序(在 Tomcat 下运行),但我不知道如何让错误处理程序工作。到目前为止,我已经创建了 Web 应用程序和 Controller ,它们都运行良好。也就是说,它们显示 Thymeleaf 模板。出错时。我得到默认的白标签错误页面。

我首先通过添加 EnableAutoConfiguration 注释禁用了这个白色标签错误页面,因此:

@SpringBootApplication(scanBasePackages="au.com.sample")
@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})
public class SampleWebApp extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SampleWebApp.class);
    }
}

现在,如果我浏览到一个未知页面,我会得到一个通用的 404 HTML 错误页面,其中包含:

<html>...<body><h1>HTTP Status 404 – Not Found</h1></body></html>

所以这一步奏效了。现在,当我尝试添加自己的错误 Controller 时,当我浏览到不存在的端点时,它不会触发:

@Controller
@RequestMapping("/")
public class ErrorHandlingController implements ErrorController {
    @Override
    public String getErrorPath() {
        return "/error";
    }

    @RequestMapping(/"error")
    public ModelAndView handleError() {
        ModelAndView mav = new ModelAndView();
        mav.addObject("title", "Error");
        mav.setViewName("layout");
        return mav;
    }
}

“layout” 是我现有的 thymeleaf 模板,它适用于我的其他端点。

我已经尝试了错误 Controller 的几种变体,例如。将端点更改为 "error"(不是 "/error"),使用 @RestController 而不是 @Controller但没有运气。在每种情况下,我都会得到相同的通用 404 HTML,而不是我手工制作的模板。

任何人都可以看到我做错了什么或有任何关于如何追踪我的问题的提示。

最佳答案

在 Spring Boot 中显示特定状态的自定义错误页面非常容易。只需添加 <error-code>.html进入src/main/resources/templates/errors目录来解决它。或者添加一个通用的 error.html作为后备。参见 the reference guide对于此功能(另请参阅 this )。

如果您想添加自己的错误处理,只需添加一个类型为 ErrorController 的 bean。或者,如果您只想添加属性,请添加 ErrorAttributes将 bean 输入到您的配置中。参见 this section获取更多信息。

关于java - 为什么我的 spring boot 错误 Controller 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50155533/

相关文章:

java - 任务 com.google.firebase.a.v 被 java.util.concurrent.ThreadPoolExecutor 拒绝

java - Hibernate import.sql 与 PostgreSQL 重复主键

JavaMail 附件和正文问题

java - 配置 Swagger-UI 以获取 Spring 的 HttpSecurity Logout 端点

spring - 测试套件运行 Spring Boot 一次

java - 启动 Spring Boot 应用程序的默认 HikariCP 连接池

java - 手工构建的 w3c 文档文本节点会导致奇怪的行为

java - 如何将 html select 中的变量作为 PathVariable 传递?

java - 如何以 Spring MVC 方式将属性转换为 JSON?

java - Spring boot/Application.java 如何获取另一个包中的 Mongo AbstractMongoConfiguration ?