簡體   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