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。我的建议是仔细检查您的库。
我正在尝试在非 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。我的建议是仔细检查您的库。