<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper
為起點
因實作SmartLifecycle
會等所有的Bean準備完成,並執行實作方法start()
開始掃描Docket
建立Documentation最後放入DocumentationCache
當呼叫path/v3/api-docs
,就會回傳swagger的json文件,OpenApiControllerWebMvc
是預設的API Controller
由DocumentationCache
取出Documentation處理完成後並回傳,就是我們看到的json檔案
@Bean
Docket docket() {
return new Docket(DocumentationType.OAS_30)
.servers(new Server("test", "http://localhost", "test",
Collections.EMPTY_LIST, Collections.EMPTY_LIST)) // 目前有些問題
.groupName("API文件")
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.app"))
.paths(PathSelectors.regex("/api/hello/.*"))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("測試api")
.description("測試用的的api")
.contact(new Contact("Lucas", "聯絡的網址", "聯絡的mail"))
.version("1.0.0") // api的版本
.build();
}
Docket裡的servers沒有反應 issue
目前Docket
裡的servers是被放到Documentation
的resourceListing而非Documentation
的servers,所以在controller取出Documentation
放入OpenAPI
的servers就沒有改變
建立一實作WebMvcOpenApiTransformationFilter
的Bean
@Override
public OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) {
OpenAPI openApi = context.getSpecification();
Server server = new Server();
server.setDescription("test");
server.setUrl("http://localhost");
List<Server> servers = new ArrayList<>(openApi.getServers());
servers.add(server);
openApi.setServers(servers);
return openApi;
}
@Override
public boolean supports(DocumentationType documentationType) {
return documentationType.equals(DocumentationType.OAS_30);
}