Развертывание модельных объектов на Swagger - PullRequest
0 голосов
/ 25 января 2019

Мое приложение представляет собой успокоительный API и интегрировано с Swagger и OpenAPI. Я сгенерировал все заглушки Java с помощью файла OpenAPI YAML, и все работает нормально. Но когда я пытаюсь развернуть объекты модели в Swagger, он не может найти некоторые объекты, хотя есть часть проекта, так как проект компилируется нормально.

Как показано на скриншоте ниже, при детализации не удается найти объект COnfiguration.

Любые идеи о том, как решить эту проблему.

enter image description here

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:

Я переместил все определения в компоненты и схемы, но они все еще разделены на несколько файлов и ссылаются на компоненты в файлах, но все равно я получаю ту же ошибку.

1 Ответ

0 голосов
/ 25 января 2019

Если вы используете OpenAPI 3, вы должны поместить схемы, которые вы хотите использовать повторно, в компоненты . Чтобы сослаться на это, вы должны использовать ссылки вроде:

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