只需添加此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作为浏览器中的默认应用名称。
答案 0 :(得分:1)
我解决了这个问题,在application.properties
中设置了春季启动应用程序的上下文路径(你可以用不同的方式设置这个变量,参见this spring doc):
server.servlet.context-path=/user
(或你的情况下是motorboy)
设置上下文路径后,我可以分别从http://localhost:8080/user/swagger-ui.html
和http://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);
}
}