swagger.json/swagger.yaml 错误 404 - 非 Maven

Error 404 for swagger.json/swagger.yaml - Non Maven

我正在尝试在非 Maven java jetty-web 应用程序中设置 swagger。 我已经从 git 存储库中获取了所有依赖项 jar 文件,并将它们包含在我的网络应用程序 WEB-INF/lib 目录中。 但是我无法访问 localhost:7443/api/swagger.json

仅供参考,在我的网络应用程序中,我使用球衣 1.x 和 jax-rs。

我已经按照文档中的说明进行了多种设置。

方法一: web-xml方式:

我在网络中添加了 swagger 初始化和引用 xml,如下所示:

  <servlet>
    <servlet-name>jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>
            io.swagger.jaxrs.json,
            io.swagger.jaxrs.listing,
            com.myproject.rest
        </param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

    <servlet>
    <servlet-name>Jersey2Config</servlet-name>
    <servlet-class>io.swagger.jaxrs.config.DefaultJaxrsConfig</servlet-class>
    <init-param>
        <param-name>api.version</param-name>
        <param-value>1.0.0</param-value>
    </init-param>
    <init-param>
        <param-name>swagger.api.basepath</param-name>
        <param-value>https://localhost:7443/api</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

....在此之后定义的更多 servlet 和过滤器

构建和 运行 成功,我的网络应用程序像往常一样出现。我在 运行 时间看到了这些日志行:

15:53:36,837 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
15:53:36,837 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [jar:file:/Users/vinayabhishek/Documents/TCPWave/workspace/tims/WebContent/WEB-INF/lib/swagger-core-1.5.11-SNAPSHOT-tests.jar!/logback-test.xml]
15:53:36,848 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@32c26e28 - URL [jar:file:/Users/vinayabhishek/Documents/TCPWave/workspace/tims/WebContent/WEB-INF/lib/swagger-core-1.5.11-SNAPSHOT-tests.jar!/logback-test.xml] is not of type file
15:53:36,866 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
15:53:37,172 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
15:53:37,175 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
15:53:37,225 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - This appender no longer admits a layout as a sub-component, set an encoder instead.
15:53:37,225 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
15:53:37,225 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
15:53:37,225 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [io.swagger] to ERROR
15:53:37,225 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to ERROR
15:53:37,225 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
15:53:37,226 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
15:53:37,227 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5e9771a5 - Registering current configuration as safe fallback point

但是 https://localhost:7443/api/swagger.json 给了我 404 响应。

方法 2:自定义应用程序 class

我定义了一个自定义 SampleApplication.java class 看起来像这样

public class SampleApplication extends Application {

  public SampleApplication() {
    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.2");
    beanConfig.setSchemes(new String[]{"http"});
    beanConfig.setHost("localhost:8002");
    beanConfig.setBasePath("/api");
    beanConfig.setResourcePackage("io.swagger.resources");
    beanConfig.setScan(true);
    System.out.println("Did we set it?");
}

  @Override
  public Set<Class<?>> getClasses() {
      Set<Class<?>> resources = new HashSet<Class<?>>();

      resources.add(PersonsService.class);
      //resources.add(SecondResource.class);
      //...

      resources.add(io.swagger.jaxrs.listing.ApiListingResource.class);
      resources.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);

      return resources;
  }
}

这也没有用。除了上面列出的 logback 之外,我在堆栈跟踪中没有看到任何错误。

我还向我的 WebService class 之一添加了注释,如下所示:

@Path("/people")
@Api( value = "/people", description = "Manage people" )

public class PeopleService {

  @Path("/list/{city_id}")
  @GET
  @Consumes({ MediaType.TEXT_PLAIN })
  @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })

  @ApiOperation( 
      value = "List all people", 
      notes = "List all people using paging", 
      response = People.class, 
      responseContainer = "List"
  )
  public ArrayList<People> list(....){


  }
}

非常感谢您对此提供的任何帮助。提前谢谢你:)

我刚刚遇到了同样的问题,并通过确保引用正确的 swagger 依赖关系解决了这个问题。 最初我包括 swagger-core 但对于我的 Jersey 2.0 项目我需要使用 swagger-jersey2-jaxrs。我的建议是仔细检查您的库。