繁体   English   中英

为什么我的弹簧启动错误控制器不起作用?

[英]Why doesn't my spring boot error controller work?

我有一个简单的Spring启动Web应用程序(在Tomcat下运行),我无法弄清楚如何使错误处理程序工作。 到目前为止,我已经创建了Web应用程序和控制器,它们都运行良好。 也就是说,它们显示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
@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"是我现有的百日咳模板,适用于我的其他终点。

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

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

在Spring Boot中显示特定状态的自定义错误页面非常简单。 只需将<error-code>.htmlsrc/main/resources/templates/errors目录即可解析。 或者添加通用error.html作为后备。 请参阅此功能的参考指南 (另请参阅此内容 )。

如果要添加自己的错误处理,只需添加ErrorController类型的bean,或者如果只想添加属性,请在配置中添加ErrorAttributes类型的bean。 有关更多信息,请参阅本节

对于为什么Spring不会调用错误控制器的原始问题的最新答案:我认为你排除了使自定义ErrorController工作的魔力。 在Spring-Boot v2.1.6应用程序中,我必须允许(不排除)ErrorMvcAutoConfiguration类,然后它在页面未找到的情况等上使用自定义的MyController-implements-ErrorController类。它似乎是一个或者两种情况。 我认为你应该只排除ErrorMvc ..类,如果你使用Thymeleaf模板并且你已经在模板/目录中发布了模板文件,因为在这种情况下你真的不需要自定义错误控制器。 HTH。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM