Swagger2改变Swagger Ui的基本路径

时间:2017-07-26 06:28:46

标签: java maven spring-boot swagger swagger-2.0

只需添加此SwaggerConfig文件并添加以下依赖项,即可将Swagger 2设置为我的SpringBoot应用程序:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
                .paths(Predicates.not(PathSelectors.regex("/error"))).build().apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        ApiInfo apiInfo = new ApiInfo("Motorcycle Shop - Restful Services", "Rest based API for Motorcycle Shop", "1.0", "",
                new Contact("", "", ""), "", "");
        return apiInfo;
    }
}

pom.xml

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
 </parent>

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Swagger -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

尽管事实上我的控制器类看起来像这样:

@RestController
@RequestMapping("/motorcycles")
public class ProductController { 

// GET method

}

...我仍然能够通过这样做来调用该控制器:

curl -X GET http://localhost:8080/motorcycles

我必须使用以下URL路径打开Swagger-ui.html文件:

http://localhost:8080/swagger-ui.html

如何让我的Spring Boot应用程序显示如下内容(实际的应用程序名称或控制器中指定的默认RequestMapping - 如果控制器是应用程序中唯一的那个):

http://localhost:8080/motorcycles/swagger-ui.html 

基本上,我如何在swagger-ui.html前加上应用名称?

所以,让我说我的应用程序叫做motorboy,这就是我想要的:

http://localhost:8080/motorboy/swagger-ui.html

REST端点的Curl -X GET如下所示:

http://localhost:8080/motorboy/motorcycles

似乎spring-boot只是使用普通的旧http://localhost:8080作为浏览器中的默认应用名称。

2 个答案:

答案 0 :(得分:1)

我解决了这个问题,在application.properties中设置了春季启动应用程序的上下文路径(你可以用不同的方式设置这个变量,参见this spring doc):

server.servlet.context-path=/user(或你的情况下是motorboy)

设置上下文路径后,我可以分别从http://localhost:8080/user/swagger-ui.htmlhttp://localhost:8080/user/v2/api-docs访问swagger-ui或swagger文档。

如果你想我可以创建一个简单的项目并更新到github只是为了澄清并解释这个配置。

答案 1 :(得分:0)

这里有一个解决方案/变通方法,可帮助定义 swagger 的基本路径。

@Component
@Primary
public class CustomBasePathJsonSerializer extends JsonSerializer {

    private static final String BASE_PATH = "/my-base-path";

    public CustomBasePathJsonSerializer(List<JacksonModuleRegistrar> modules) {
        super(modules);
    }

    @Override
    public Json toJson(Object toSerialize) {
        if (toSerialize instanceof Swagger) {
            Swagger swagger = (Swagger) toSerialize;
            swagger.basePath(BASE_PATH);
        }
        return super.toJson(toSerialize);
    }
}