首页 文章

swagger jersey REST API不起作用

提问于
浏览
1

我按照步骤将Swagger添加到我在TOMCAT中已经构建的Jersey REST API项目中

  • 补充:

swagger-annotations-1.3.10.jar
招摇,core_2.10-1.3.10.jar
招摇,jaxrs_2.10-1.3.10.jar
招摇-jersey2-jaxrs_2.10-1.3.10.jar

  • 在web.xml中添加

contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation com.estartup.config.PersistenceConfig

<!-- Bootstrap the root application context as usual using ContextLoaderListener -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.estartup.config.Application</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Jersey2Config</servlet-name>
    <servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</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>http://localhost:8080/api</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

申请类:

public class Application extends ResourceConfig {

    @Inject
    public Application(ServiceLocator serviceLocator) {
        register(new ServiceBinder());
        register(com.estartup.feature.JacksonFeature.class);            
        packages(true, "com.estartup", "com.wordnik.swagger.jaxrs.json","com.wordnik.swagger.jersey.listing");

    }

}

但是,当我导航到

http://localhost:8080/api/api-docs 我得到 HTTP Status 404 - page not found.

:( . 在日志中,我确实看到像这样装载的招摇:什么是错的?

15935 DEBUG [localhost-startStop-1] com.wordnik.swagger.jaxrs.config.WebXMLReader - set api.version to 1.0.0
15935 DEBUG [localhost-startStop-1] com.wordnik.swagger.jaxrs.config.WebXMLReader - set swagger.api.basepath to http://localhost:8080/api

2 回答

  • 1

    根据您的评论,如果您的应用程序部署在Tomcat上,那么很可能是错误的URL .

    假设您的应用程序的上下文根是 myapp ,那么您的API本身将在 http://localhost:8080/myapp/api/... 上可用,并且同样的方式,swagger文档将在 http://localhost:8080/myapp/api/api-docs 上可用 .

  • 3

    试试这个配置:

    pom.xml

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

    web.xml

    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
        <display-name>ProjectName</display-name>
    
        <servlet>
            <servlet-name>jersey-servlet</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>your.package.name.YourApplication</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>jersey-servlet</servlet-name>
            <url-pattern>/rs/*</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>SwaggerBootstrap</servlet-name>
            <servlet-class>your.package.name.SwaggerApplication</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
    
    </web-app>
    

    SwaggerApplication.java

    public class SwaggerApplication extends HttpServlet {
    
        private static final long serialVersionUID = -6039834823506457822L;
    
        @Override
        public void init(ServletConfig config) throws ServletException {
    
            super.init(config);
    
            BeanConfig beanConfig = new BeanConfig();
    
            final String contextPath = config.getServletContext().getContextPath();
            final StringBuilder sbBasePath = new StringBuilder(); 
            sbBasePath.append(contextPath);
            sbBasePath.append("/rs");
            beanConfig.setBasePath(sbBasePath.toString());
    
            // API Info
            beanConfig.setVersion("0.1");
            beanConfig.setTitle("My Swagger APP");
            beanConfig.setResourcePackage("your.package.name");
            beanConfig.setScan(true);
        }
    }
    

    要访问您的Swagger JSON: http://<your-app>/<your-context>/rs/swagger.json

相关问题