Spring boot & Swagger 2 UI & 自定义 requestmappinghandlermapping - 映射问题

2023-12-31

我有自己的 RequestMappingHandlerMapping 并且正在使用 springfox-swagger-ui。添加自定义映射后,我无法在以下位置实现 swagger uihttp://localhost:8080/swagger-ui.html http://localhost:8080/swagger-ui.html。 有任何想法吗?

这是我的配置。

    @Configuration
       public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        return new ApiVersionRequestMappingHandlerMapping("v");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
          .addResourceHandler("/webjars/**")
          .addResourceLocations("(META-INF/resources/webjars");
    }
}

这是我的 pom.xml:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.hateoas</groupId>
        <artifactId>spring-hateoas</artifactId>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

当你重写WebMvcConfigurationSupport时,你也重写了spring Boot的mvc自动配置(WebMvcAutoConfiguration)。因此,需要spring boot配置的资源将无法工作。这不是 swagger 特有的问题。

您可以在这里找到更多相关信息:

https://github.com/spring-projects/spring-boot/issues/5004 https://github.com/spring-projects/spring-boot/issues/5004

正如 github 问题所表明的那样,将来将会对此进行更改以使其更容易。目前有一些解决方法,如建议的那样。

一种快速但肮脏的方法是将 WebMvcAutoConfiguration 类复制并粘贴到您自己的类中,从 EnableWebMvcConfiguration 的 requestMappingHandlerMapping() 方法返回您自己的 HandlerMapping,并将 WebMvcAutoConfiguration 的副本注册为自动配置类。您可以在此处查看说明:

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html

确保将 WebMvcAutoConfiguration 的副本放置在某个未自动扫描和拾取组件的包中。它应该按照上面链接中的说明进行注册。

还要确保在从 requestMappingHandlerMapping() 方法返回自定义 HandlerMapping() 方法之前将其顺序设置为 0,如下所示:

@Bean
@Primary
@Override
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
    // Must be @Primary for MvcUriComponentsBuilder to work

    ApiVersionRequestMappingHandlerMapping handlerMapping = new ApiVersionRequestMappingHandlerMapping("v");
    handlerMapping.setOrder(0);
    handlerMapping.setInterceptors(getInterceptors());
    handlerMapping.setContentNegotiationManager(mvcContentNegotiationManager());

    PathMatchConfigurer configurer = getPathMatchConfigurer();
    if (configurer.isUseSuffixPatternMatch() != null) {
        handlerMapping.setUseSuffixPatternMatch(configurer.isUseSuffixPatternMatch());
    }
    if (configurer.isUseRegisteredSuffixPatternMatch() != null) {
        handlerMapping.setUseRegisteredSuffixPatternMatch(configurer.isUseRegisteredSuffixPatternMatch());
    }
    if (configurer.isUseTrailingSlashMatch() != null) {
        handlerMapping.setUseTrailingSlashMatch(configurer.isUseTrailingSlashMatch());
    }
    if (configurer.getPathMatcher() != null) {
        handlerMapping.setPathMatcher(configurer.getPathMatcher());
    }
    if (configurer.getUrlPathHelper() != null) {
        handlerMapping.setUrlPathHelper(configurer.getUrlPathHelper());
    }

    return handlerMapping;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring boot & Swagger 2 UI & 自定义 requestmappinghandlermapping - 映射问题 的相关文章

随机推荐