Мое приложение представляет собой успокоительный API и интегрировано с Swagger и OpenAPI.
Я сгенерировал все заглушки Java с помощью файла OpenAPI YAML, и все работает нормально.
Но когда я пытаюсь развернуть объекты модели в Swagger, он не может найти некоторые объекты, хотя есть часть проекта, так как проект компилируется нормально.
Как показано на скриншоте ниже, при детализации не удается найти объект COnfiguration.
Любые идеи о том, как решить эту проблему.
Edit:
У меня есть спокойный веб-сервис, и я генерирую все Java-заглушки [Объекты передачи данных] из файла YAML, используя плагин openapi-generator. Этот плагин автоматически генерирует класс OpenAPIDocumentationConfig и следующие детали этого класса. После этой настройки модели автоматически генерируются в интерфейсе Swagger.
Также хочу добавить, что я использую 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:
Я переместил все определения в компоненты и схемы, но они все еще разделены на несколько файлов и ссылаются на компоненты в файлах, но все равно я получаю ту же ошибку.