Java 将web应用升级到Spring Boot 2.4后出现IllegalStateException

Java 将web应用升级到Spring Boot 2.4后出现IllegalStateException,java,spring-boot,tomcat,servlets,contextpath,Java,Spring Boot,Tomcat,Servlets,Contextpath,升级到Spring Boot 2.4后,我的web应用程序不再启动。它将抛出以下错误: Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly. 我正在使用以下代码更改上下文路径,我的研究指出我是“罪魁祸首”(更改上下文路径): 我有以下方法,我可以看到它可以用来传递defaultServletName,但我不

升级到Spring Boot 2.4后,我的web应用程序不再启动。它将抛出以下错误:

Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.
我正在使用以下代码更改上下文路径,我的研究指出我是“罪魁祸首”(更改上下文路径):

我有以下方法,我可以看到它可以用来传递defaultServletName,但我不知道应该传递什么值:

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 
{
    configurer.enable();
}
这在Spring Boot 2.3.4上非常有效。我在那里传递什么值?它是主控制器的名称吗?

由于嵌入式Servlet容器提供的
DefaultServlet
在默认情况下不再注册。如果您的应用程序需要它,正如您的应用程序所做的那样,您可以通过将
server.servlet.register default servlet
设置为
true
来启用它

或者,您可以使用
WebServerFactoryCustomizer
bean以编程方式配置它:

@Bean
WebServerFactoryCustomizer enableDefaultServlet(){
return(factory)->factory.setRegisterDefaultServlet(true);
}

请注意,必须通过自定义程序应用配置,以便默认的基于属性的配置不会覆盖它。

谢谢你,安迪,我想我昨天晚上读了那里的所有相关内容,但我想已经很晚了。这确实可以修复它,但是有没有一种方法可以通过编程的方式实现呢?试图减少我的application.properties文件中属性的数量。谢谢
TomcatServletWebServerFactory
上有一个setter,您可以使用它。我已经更新了我的答案。编程方法不起作用,我只能用propertyAh通过这个错误,是的。这是一个导致覆盖配置的排序问题。我用更好的方法更新了答案。是的,这很有效!谢谢安迪,你们太棒了!谢谢你的好产品!
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 
{
    configurer.enable();
}