swagger 两次添加上下文根 [英] swagger is adding context root twice

查看:14
本文介绍了swagger 两次添加上下文根的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 spring-data-rest 中使用 swagger 3.0.0-SNAPSHOT.我的应用程序属性文件中有上下文配置

I am using swagger 3.0.0-SNAPSHOT with my spring-data-rest. I have context configure in my application property file

server.servlet.context-path=/sample/

我的swagger配置如下:

my swagger configuration is as follows:

@Configuration
@EnableSwagger2WebMvc
@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
public class SwaggerConfig {
    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

我正在访问我的 swagger uihttp://localhost:8080/sample/swagger-ui.html

I am accessing my swagger ui as http://localhost:8080/sample/swagger-ui.html

swagger 中的所有端点都像

all end point in swagger appear like

http://locahost:8080/sample/sample/getHello

http://locahost:8080/sample/sample/getName

http://locahost:8080/sample/sample/getAge

这些网址应该是

http://locahost:8080/sample/getHello

http://locahost:8080/sample/getName

http://locahost:8080/sample/getAge

如何避免大摇大摆地向端点添加额外的上下文根

How do I avoid swagger to add extra context root to endpoint

我的 RestController 看起来像

My RestController looks like

 @RestController
public class HelloController {
    @RequestMapping("/hello")
    public String getHello(){
        return "Hello";
    }

    @RequestMapping("/name")
    public String getName(){
        return "Sample Name";
    }

    @RequestMapping("/age")
    public Integer getAge(){
        return 37;
    }
}

我已经通过一个示例项目确认它在每种情况下都会发生

推荐答案

当我们迁移到 swagger 3.0.0-SNAPSHOT 时,它的包含上下文路径也在基本路径中.因此,我们可以通过使用 PathProvider 的匿名实现来删除它.我可以使用以下简单配置来管理 swagger 工作.

When we migrate to swagger 3.0.0-SNAPSHOT, it's include context path also in base path. So, we can remove it by using anonymous implementation of PathProvider. I am able to manage swagger work with the below simple configuration.

import io.swagger.annotations.Api;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.PathProvider;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger.web.UiConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;


@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig extends WebMvcConfigurationSupport {

    private static final String DESCRIPTION = "My application description";

    private static final String TITLE = " My service title";

    private static final String API_VERSION = "1.0";

    @Value("${server.servlet.context-path}")
    private String contextPath;

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title(TITLE).description(DESCRIPTION).version(API_VERSION).build();
    }

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

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).pathProvider(new PathProvider() {
            @Override
            public String getOperationPath(String operationPath) {
                return operationPath.replace(contextPath, StringUtils.EMPTY);
            }

            @Override
            public String getResourceListingPath(String groupName, String apiDeclaration) {
                return null;
            }
        }).select().apis(RequestHandlerSelectors.withClassAnnotation(Api.class)).build().apiInfo(apiInfo());
    }

    @Bean
    public UiConfiguration uiConfig() {
        return UiConfigurationBuilder.builder().displayRequestDuration(true).validatorUrl(StringUtils.EMPTY).build();
    }
}

这篇关于swagger 两次添加上下文根的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆