如何将Swagger添加到仅使用ResourceConfig的Jersey Web应用程序?

时间:2013-10-27 22:07:01

标签: jersey jax-rs web.xml swagger

我们已经开始使用REST api开发Web应用程序,我发现Swagger,我真的想要它......但是,我正在努力弄清楚如何在我们的应用程序中添加它。该应用程序被声明为这样(假设):

package hello.world;

import org.glassfish.jersey.server.ResourceConfig;

public class CloudApplication extends ResourceConfig {
    public CloudApplication() {
        // Add all resources from hello.world
        packages("hello.world", "com.fasterxml.jackson.jaxrs");
    }
}

项目有一个像这样的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    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>hello.world</display-name>
    <servlet>
        <servlet-name>hello.world.CloudApplication</servlet-name>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello.world.CloudApplication</servlet-name>
        <url-pattern>/hw/*</url-pattern>
    </servlet-mapping>
</web-app>

我的pom.xml文件包含

...
<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-jaxrs_2.9.1</artifactId>
    <scope>compile</scope>
    <version>1.3.0</version>
</dependency>
...

查看https://github.com/wordnik/swagger-core/tree/master/samples,我找到了所有不同的设置,但我无法弄清楚要使用哪个。 https://github.com/wordnik/swagger-core/tree/master/samples/java-jaxrs似乎是正确的,但我可以只用资源配置保持当前的项目结构吗? / samples / java-jaxrs似乎需要很多web.xml的东西......我可以在代码中这样做吗?那里有样品吗?

我对网络应用程序没有那么多经验,但我很乐意让这个Swagger工作。

// Jonas

1 个答案:

答案 0 :(得分:1)

好吧,它有点痛苦。我最后得到了以下内容,也许它只是另一种会让您感到困惑的设置,但也许它也适合您:

我使用一个小的bootstrap类来配置像这样的招摇:

public class SwaggerBootstrap extends HttpServlet {

    @Override public void init(ServletConfig servletConfig) {

        ConfigFactory.config().setBasePath(basepath);
        ConfigFactory.config().setApiPath(apipath);
        ConfigFactory.config().setApiVersion(apiversion);
        ConfigFactory.config().setSwaggerVersion(com.wordnik.swagger.core.SwaggerSpec.version());
    }
}

我的web.xml包含:

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.wordnik.swagger.jersey.listing</param-value>
</init-param>

<servlet>
   <servlet-name>JerseyJaxrsConfig</servlet-name>
   <servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>   
   <load-on-startup>2</load-on-startup>
</servlet>

<servlet>
    <servlet-name>SwaggerBootstrap</servlet-name>
    <servlet-class>my.path.SwaggerBootstrap</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

我的pom提取物在这里:

<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-jersey2-jaxrs_2.10</artifactId>
    <version>1.3.4</version>
</dependency>

<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-jaxrs_2.10</artifactId>
    <version>1.3.4</version>
</dependency>
祝你好运;)