我的应用程序是一个宁静的api,它与Swagger和OpenAPI集成在一起。 我已经使用OpenAPI YAML文件生成了所有Java存根,并且一切正常。 但是,当我尝试在Swagger上向下钻取模型对象时,尽管有一部分项目可以正常工作,但它无法找到某些对象。
如下面的屏幕截图所示,向下钻取无法找到COnfiguration对象。
有关如何解决此问题的任何想法。
编辑:
我有一个宁静的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:
我将所有定义移至组件和架构,但它们仍拆分为多个文件,并在文件中引用组件,但仍然出现相同的错误。
答案 0 :(得分:0)
如果您使用的是OpenAPI 3,则应将要重用的架构放在components中。要引用它,您必须使用以下引用:
$ref: "#/components/schemas/EquityOptionConfigurationDO"