Swagger.json未在Jersey + Tomcat8产生
问题描述:
的pom.xmlSwagger.json未在Jersey + Tomcat8产生
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.7</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
</exclusion>
</exclusions>
</dependency>
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.jaxrs.listing,
rs
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.title</param-name>
<param-value>Swagger APIzz</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/SwaggerExample/webapi</param-value>
</init-param>
<init-param>
<param-name>swagger.pretty.print</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>swagger.scan</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
</web-app>
SwaggerExample是上下文根
PeopleRestService.java存在内部RS包
@Path("/people")
@Api(value = "/", description = "Manage people")
public class PeopleRestService {
private static PeopleService peopleService;
static{
peopleService = new PeopleService();
}
@Produces({ MediaType.APPLICATION_JSON })
@GET
@ApiOperation(value = "List all people", notes = "List all people using paging", response = Person.class, responseContainer = "List")
public Collection<Person> getPeople( @ApiParam(value = "Page to fetch", required = true) @QueryParam("page") @DefaultValue("1") final int page) {
System.out.println("inside service........");
return peopleService.getPeople(page, 100);
}
}
上面的代码能够通过webservice
获得的数据,但在访问swagger.json,这是给404
http://localhost:8080/SwaggerExample/webapi/people:做工精细
http://localhost:8080/SwaggerExample/webapi/swagger.json:是给404
答
如果可以的话在swagger UI上看到你的API,这意味着swagger UI知道你的swagger.json在哪里,在我的情况下,我去了index.html
并搜索swagger.json
。
我发现这个代码
var url = window.location.search.match(/url=([^&]+)/);
if (url && url.length > 1) {
url = decodeURIComponent(url[1]);
} else {
url = "/my-app-name/app/swagger.json"; << this
}
编辑1:
在newer versions你会发现像
const ui = SwaggerUIBundle({
url: "http://petstore.swagger.io/v2/swagger.json", << this
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
我想你也将有相应的更换你的init-param
所以你可以远程访问它。
<param-value>http://localhost:8080/SwaggerExample/webapi</param-value>
为相对路径
<param-value>/SwaggerExample/webapi</param-value>
答
在web.xml与
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>
services.ConfigApplication
</param-value>
</init-param>
取代
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.jaxrs.listing,
rs
</param-value>
</init-param>
和寄存器类明确
class ConfigApplication extends ResourceConfig{
public ConfigApplication(){
register(ApiListingResource.class);
register(SwaggerSerializers.class);
register(PeopleRestService.class);
}
}
不,我已经删除了localhost:8080,但仍然无法正常工作。 – Ankit