2017-10-29 152 views
0

的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

回答

0

如果可以的话在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> 
+0

不,我已经删除了localhost:8080,但仍然无法正常工作。 – Ankit

0

在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); 
    } 

}