Как перенести Swagger2.0 на Swagger 3.0 в Jax-R - PullRequest
0 голосов
/ 12 апреля 2020

Я очень новичок в чванстве. Я создал пример проекта JAX-RS, в который я интегрировал документацию Swagger 2.0. После многих неудачных попыток я все еще не могу понять, как я перенесу свою документацию Swagger 2.0 в Swagger 3.0. Кроме того, как проще всего разместить пользовательский интерфейс Swagger в моем проекте?

Итак, вкратце, у меня есть 2 вопроса

1) Как перенести это в Swagger 3.0? 2) Какой самый простой способ самостоятельно разместить пользовательский интерфейс в этом проекте?

Ниже приведен пример кода для основных файлов моего проекта для справки. Буду очень признателен за помощь. Огромное спасибо !!!

==================== pom. xml Файл =========== =========

        <!-- Swagger -->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.18</version>
        </dependency>

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-jersey2-jaxrs</artifactId>
            <version>1.5.18</version>
        </dependency>

==================== веб. xml Файл ====== ==============

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Starbucks Web Application</display-name>
  <filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

==================== Основной файл приложения ==== ================


package com.starbucks.app;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Stage;
import com.google.inject.servlet.ServletModule;
import com.starbucks.cors.SimpleCorsFilter;
import com.starbucks.guice.ApiBaseModule;
import com.starbucks.request.ObjectMapperContextResolver;
import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.jaxrs.listing.SwaggerSerializers;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ServerProperties;
import org.jvnet.hk2.guice.bridge.api.GuiceBridge;
import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge;

import javax.inject.Inject;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.core.HttpHeaders;

@ApplicationPath("api")
public class App extends ResourceConfig {
    @Inject
    public App(final ServiceLocator serviceLocator) {

        // Packages to Scan for Jersey Resources
        packages(true, "com.starbucks.api");
        packages(true, "com.starbucks.exception.mapper");

        // Jackson
        register(ObjectMapperContextResolver.class);
        register(JacksonFeature.class);

        // HK2-Guice Bridge
        Injector injector = createGuiceInjector();
        initGuiceIntoHK2Bridge(serviceLocator, injector);

        // Register Filters


        // CORSFilter
        register(SimpleCorsFilter.newBuilder()
                .allowOriginDomain("localhost")
                .allowCredentials()
                .allowMethod(HttpMethod.GET)
                .allowMethod(HttpMethod.OPTIONS)
                .allowMethod(HttpMethod.POST)
                .allowMethod(HttpMethod.PUT)
                .allowHeader(HttpHeaders.CONTENT_TYPE)
                .build());


        // Jersey Event Listener


        // Swagger
        register(ApiListingResource.class);
        register(SwaggerSerializers.class);
        setUpSwagger();

        //Tracing
        property(ServerProperties.TRACING, "ON_DEMAND");
        property(ServerProperties.TRACING_THRESHOLD, "VERBOSE");

        //Jersey BeanValidation
        property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);

    }

    private void initGuiceIntoHK2Bridge(final ServiceLocator serviceLocator, final Injector injector) {
        GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
        GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
        guiceBridge.bridgeGuiceInjector(injector);
    }

    private boolean isMac() {
        return "mac os x".equalsIgnoreCase(System.getProperty("os.name"));
    }

    private Module[] getBaseModule() {
        return new Module[]{
                new ServletModule(),
                new ApiBaseModule()
        };
    }

    private Injector createGuiceInjector() {
        if (isMac()) {
            return Guice.createInjector(getBaseModule());
        } else {
            return Guice.createInjector(Stage.PRODUCTION, getBaseModule());
        }
    }

    private BeanConfig setUpSwagger() {
        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion("1.0.2");
        beanConfig.setSchemes(new String[]{"http"});
        beanConfig.setHost("localhost:8080");
        beanConfig.setBasePath("/api");
        beanConfig.setResourcePackage("com.starbucks.api");
        beanConfig.setDescription("Provides the list of APIs for Starbucks backend");
        beanConfig.setTitle("Starbucks Backend API");
        beanConfig.setScan(true);
        return beanConfig;
    }
}


==================== Файл ресурса === =================

package com.starbucks.api;

import com.starbucks.config.SharedConfig;
import com.starbucks.service.PingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Api(value = "Health Check")
@Path("v1")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class PingApiResource {

    private SharedConfig config;
    private PingService pingService;

    @Inject
    public PingApiResource(final SharedConfig config, final PingService pingService) {
        this.config = config;
        this.pingService = pingService;
    }

    @GET
    @Path("/ping")
    @ApiOperation(value = "Ping API",
    notes = "Simple Ping API for health check",
    response = String.class)
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "OK"),
            @ApiResponse(code = 404, message = "PING NOT FOUND"),
            @ApiResponse(code = 500, message = "INTERNAL SERVER ERROR")
    })
    public Response ping() {
        String res = pingService.getPingResponse();
        System.out.println(config.getList("whiteListedDomains"));
        return Response.ok().entity("{\"data\":\"" + res + " from " + config.appName("appName") + "\"}").build();
    }
}

Буду очень признателен за помощь. Большое вам спасибо !!!

...