如何向 SpringFox 生成的 Swagger json 添加自定义字段?

Dhe*_*rik 2 swagger springfox

我正在尝试将该字段添加externalDocs到Springfox生成的 Json 中

"externalDocs": {
    "description": "find more info here",
    "url": "https://swagger.io/about"
},
Run Code Online (Sandbox Code Playgroud)

阅读 SpringFox 文档,我明白我需要创建一个plugin来扩展 SpringFox 功能并添加这个字段。我试过:

@Component
@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1002)
@Slf4j
public class ExternalDocSwaggerConfiguration implements ApiListingBuilderPlugin {

    @Override
    public void apply(final ApiListingContext apiListingContext) {

        ObjectVendorExtension ext = new ObjectVendorExtension("externalDocs");
        ext.addProperty(new StringVendorExtension("description", "Link externo"));
        ext.addProperty(new StringVendorExtension("url", "https://swagger.io/about"));
        apiListingContext.apiListingBuilder().extensions(
            Collections.singletonList(ext)); // extensions does not exist
    }

    @Override
    public boolean supports(final DocumentationType documentationType) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待添加扩展名,如显示这里OperationBuilderPlugin,但是没有extensions方法上apiListingBuilder

那么,如何使用 SpringFox 在生成的 Swagger Json 的根上添加这个标签?

Dhe*_*rik 5

2.7.0 版本增加了这个功能

要添加此字段externalDocs,您可以使用以下extensions方法Docket

@Bean
public Docket customImplementation() {

    ObjectVendorExtension ext = new ObjectVendorExtension("externalDocs");
    ext.addProperty(new StringVendorExtension("description", "Link externo"));
    ext.addProperty(new StringVendorExtension("url", "https://swagger.io/about"));

    return new Docket(DocumentationType.SWAGGER_2)
            .extensions(Collections.singletonList(ext))
            .apiInfo(apiInfo())
            .securitySchemes(newArrayList(apiKey()))
            .pathMapping("/api")
            .securityContexts(newArrayList(securityContext())).select()
            .apis(getPackages())
            .paths(PathSelectors.any())
            .build();
}
Run Code Online (Sandbox Code Playgroud)