[Springfox]使用笔记-01

SpringFox设定

maven dependency

<dependency>    <groupId>io.springfox</groupId>    <artifactId>springfox-boot-starter</artifactId>    <version>3.0.0</version></dependency>

如何读取Docket

springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper为起点
http://img2.58codes.com/2024/201458562cWnN2TJRg.png

因实作SmartLifecycle会等所有的Bean準备完成,并执行实作方法start()
http://img2.58codes.com/2024/20145856jI606Vr5h0.png

开始扫描Docket建立Documentation最后放入DocumentationCache
http://img2.58codes.com/2024/20145856NDjB1rWRx9.png

当呼叫path/v3/api-docs,就会回传swagger的json文件,OpenApiControllerWebMvc是预设的API Controller
http://img2.58codes.com/2024/20145856v7acT7CbMY.png

DocumentationCache取出Documentation处理完成后并回传,就是我们看到的json档案
http://img2.58codes.com/2024/20145856QgmzQok9No.png

Docket建立

範例程式

@BeanDocket 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就没有改变
http://img2.58codes.com/2024/20145856DQuVwMDDio.png
http://img2.58codes.com/2024/20145856usArA5kSZN.png

暂时解决方式

建立一实作WebMvcOpenApiTransformationFilter的Bean

@Overridepublic 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;}@Overridepublic boolean supports(DocumentationType documentationType) {    return documentationType.equals(DocumentationType.OAS_30);}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章