在Swagger

时间:2019-01-25 11:30:39

标签: rest swagger openapi

我的应用程序是一个宁静的api,它与Swagger和OpenAPI集成在一起。 我已经使用OpenAPI YAML文件生成了所有Java存根,并且一切正常。 但是,当我尝试在Swagger上向下钻取模型对象时,尽管有一部分项目可以正常工作,但它无法找到某些对象。

如下面的屏幕截图所示,向下钻取无法找到COnfiguration对象。

有关如何解决此问题的任何想法。

enter image description here

编辑:

我有一个宁静的Web服务,并使用openapi-generator插件从YAML文件生成了所有Java存根[数据传输对象]。该插件会自动生成一个类OpenAPIDocumentationConfig,以下是该类的详细信息。完成此设置后,将在Swagger UI中自动生成模型。 还想补充一点,我正在使用OpenAPI 3.0,但是我需要将对象定义拆分为多个文件。因此,我使用定义来引用它们,因为我不认为组件架构可以拆分为多个文件。

@Configuration
@EnableSwagger2
public class OpenAPIDocumentationConfig {

ApiInfo apiInfo() {
    return new ApiInfoBuilder()
        .title("ABC Service")
        .description("ABC Service")
        .license("")
        .licenseUrl("http://unlicense.org")
        .termsOfServiceUrl("")
        .version("1.0.0")
        .contact(new Contact("","", "xyz@abc.com"))
        .build();
}

@Bean
public Docket customImplementation(ServletContext servletContext, @Value("${openapi.studioVALService.base-path:}") String basePath) {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
                .apis(RequestHandlerSelectors.basePackage("com.x.y.z"))
                .build()
            .pathProvider(new BasePathAwareRelativePathProvider(servletContext, basePath))
            .directModelSubstitute(java.time.LocalDate.class, java.sql.Date.class)
            .directModelSubstitute(java.time.OffsetDateTime.class, java.util.Date.class)
            .apiInfo(apiInfo());
}

class BasePathAwareRelativePathProvider extends RelativePathProvider {
    private String basePath;

    public BasePathAwareRelativePathProvider(ServletContext servletContext, String basePath) {
        super(servletContext);
        this.basePath = basePath;
    }

    @Override
    protected String applicationPath() {
        return  Paths.removeAdjacentForwardSlashes(UriComponentsBuilder.fromPath(super.applicationPath()).path(basePath).build().toString());
    }

    @Override
    public String getOperationPath(String operationPath) {
        UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromPath("/");
        return Paths.removeAdjacentForwardSlashes(
                uriComponentsBuilder.path(operationPath.replaceFirst("^" + basePath, "")).build().toString());
    }
}

}

编辑2:

我将所有定义移至组件和架构,但它们仍拆分为多个文件,并在文件中引用组件,但仍然出现相同的错误。

1 个答案:

答案 0 :(得分:0)

如果您使用的是OpenAPI 3,则应将要重用的架构放在components中。要引用它,您必须使用以下引用:

$ref: "#/components/schemas/EquityOptionConfigurationDO"