BeanConfig (или похожий?) В Swagger 2.0 (OpenApi 3.0) - PullRequest
0 голосов
/ 14 января 2019

Я сейчас перевожу наши документы API (которые были Swagger 1.5) на Swagger 2.0 (OpenApi 3.0)

Документы API - это документы Swagger, которые генерируются с помощью Java-аннотаций с использованием пакетов maven swagger-annotations и swagger-jaxrs. Я уже обновил pom.xml новыми версиями, поэтому он выглядит так:

        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-jaxrs2</artifactId>
            <version>2.0.6</version>
        </dependency>

А также все старые аннотации заменены новыми (которые сильно меняются) и выглядят хорошо.

Дело в том, что мы использовали BeanConfig для определения общей конфигурации документов и автоматического сканирования всех ресурсов REST, поэтому документация была сгенерирована автоматически при /swagger.json.

Проблема заключается в том, что я не могу найти "новый способ" сделать такую ​​вещь, как создание BeanConfig и автоматическое сканирование ресурсов, чтобы все генерировалось в /swagger.json или /openapi.json (возможно сейчас что-то вроде OpenAPIDefinition?)

Если бы кто-то мог указать мне правильное направление, я был бы очень благодарен ...

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Хотя OP ответил на их собственный вопрос, но добавил еще несколько деталей для таких людей, как я, которые попали в этот пост, когда я хотел перейти с swagger 1.x на swagger 2.0 (openAPI 3) и нуждался в полной конфигурации.

(Этот пример для встроенного причала)

// Jetty configuration

// ContextHandlerCollection contexts

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/api");
context.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherType.class));

ResourceConfig resourceConfig = new ResourceConfig(ImmutableSet.<Class<?>>builder()
                                                                .add(MyRestService.class)
                                                                .build());
resourceConfig.registerClasses(OpenApiResource.class,AcceptHeaderOpenApiResource.class); // for swagger, this will cerate openapi.json at <host>/api/openapi.json
context.addServlet(new ServletHolder(new ServletContainer(resourceConfig)), "/*");
contexts.addHandler(context);   

Если вам нужно изменить конфигурацию swagger по умолчанию, это можно сделать с помощью описанного в ответе OP:

OpenAPI oas = new OpenAPI();
        Info info = new Info()
            .title("Swagger Sample App bootstrap code")
            .description("This is a sample server Petstore server.  You can find out more about Swagger " +
                    "at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For this sample, " +
                    "you can use the api key `special-key` to test the authorization filters.")
            .termsOfService("http://swagger.io/terms/")
            .contact(new Contact()
                    .email("apiteam@swagger.io"))
            .license(new License()
                    .name("Apache 2.0")
                    .url("http://www.apache.org/licenses/LICENSE-2.0.html"));

        oas.info(info);
        SwaggerConfiguration oasConfig = new SwaggerConfiguration()
            .openAPI(oas)
            .prettyPrint(true)
            .resourcePackages(Stream.of("io.swagger.sample.resource").collect(Collectors.toSet()));

        try {
            new JaxrsOpenApiContextBuilder()
                .servletConfig(servletConfig)
                .application(this)
                .openApiConfiguration(oasConfig)
                .buildContext(true);
        } catch (OpenApiConfigurationException e) {
            throw new RuntimeException(e.getMessage(), e);
        }
0 голосов
/ 16 января 2019

После некоторых исследований я мог найти некоторую документацию об этом в их Github для приложения JAX-RS, так что в результате получилось нечто похожее на то, что я делал, но теперь вместо использования BeanConfig, он использует OpenAPI и Info:

@ApplicationPath("/sample")
public class MyApplication extends Application {

    public MyApplication(@Context ServletConfig servletConfig) {
        super();
        OpenAPI oas = new OpenAPI();
        Info info = new Info()
            .title("Swagger Sample App bootstrap code")
            .description("This is a sample server Petstore server.  You can find out more about Swagger " +
                    "at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For this sample, " +
                    "you can use the api key `special-key` to test the authorization filters.")
            .termsOfService("http://swagger.io/terms/")
            .contact(new Contact()
                    .email("apiteam@swagger.io"))
            .license(new License()
                    .name("Apache 2.0")
                    .url("http://www.apache.org/licenses/LICENSE-2.0.html"));

        oas.info(info);
        SwaggerConfiguration oasConfig = new SwaggerConfiguration()
            .openAPI(oas)
            .prettyPrint(true)
            .resourcePackages(Stream.of("io.swagger.sample.resource").collect(Collectors.toSet()));

        try {
            new JaxrsOpenApiContextBuilder()
                .servletConfig(servletConfig)
                .application(this)
                .openApiConfiguration(oasConfig)
                .buildContext(true);
        } catch (OpenApiConfigurationException e) {
            throw new RuntimeException(e.getMessage(), e);
        }

    }
}
...