避免在 Spring Boot 中为创建为 @Bean 的 Servlet 自动映射

Avoid automatic servlet mapping for a Servlet created as a @Bean in Spring Boot

我有一个 servlet,我需要通过自动装配为其提供依赖项(它是来自外部库的 class,我无法更改其代码)。我尝试将其注册为 bean,然后使用编程注册 (ServletContextInitializer) 进行注册。这是我拥有的:

@Configuration
public class MyConfiguration {
    @Bean
    public MyServlet myServlet() {
        return new MyServlet();
    }
}

此外,Spring与 MVC 相关的自动配置会创建一个常用的 DispatcherServlet 并将其映射到 /

当我尝试启动应用程序时,我得到以下信息:

Caused by: java.lang.IllegalStateException: Multiple servlets map to path /: dispatcherServlet[mapped:JAVAX_API:null],myServlet[mapped:JAVAX_API:null]

因此看起来 Spring 引导(或 Spring 本身?)自动将 servlet 映射到默认值 /。我想完全避免映射,因为我只需要创建 servlet 实例;稍后我会自己注册。

这可以做到吗?

你应该使用 ServletRegistrationBean 然后你可以提供额外的映射

@Bean
public MyServlet myServlet() {
    return new MyServlet();
}

@Bean
public ServletRegistrationBean myServletRegistration(MyServlet myServlet) {
    ServletRegistrationBean registration = new ServletRegistrationBean(myServlet,
            "/myservlet/*");
    registration.setLoadOnStartup(1);
    return registration;
}