Jersey + Swagger + Swagger-UI + Maven配置

时间:2016-04-10 22:27:53

标签: eclipse maven jersey swagger swagger-ui

我第一次尝试与泽西和梅文一起招摇,我想知道我是否正走在正确的道路上。我在我的本地电脑上工作了球衣,maven和swagger。很快,我想将它部署到不同的环境中并包含swagger-ui。

  1. 如果我将我的web.xml文件配置为<param-value>http://localhost:8080/api</param-value>,那么我看到swagger在我的本地计算机上运行。但是每次我想将代码部署到不同的环境(例如从Dev环境,QA环境到生产环境)时,我是否需要更改此地址,如果是这样,我将如何去做或者是不可能/不是什么样的招摇?

  2. 我想将swagger-ui与我的项目结合起来。我看到在线建议从git手动下载文件并将其放入我的项目中。但我想知道的是,如果有一个maven依赖,我可以使用,以便我可以使用maven获取必要的代码使用swagger-ui并配置它与泽西一起使用。如果是,那么依赖是什么?如何使用它来通过多种环境部署代码?

  3. 如果可能的话,请提供指导和教程链接,因为我是这项技术的新手。另外,如果我在思考过程中使用jersey / swagger / swagger-ui / maven而无需从git手动下载代码并能够通过多种环境部署代码,请告诉我,以便我可以寻找另一种使用方法我的应用程序中的REST。

    感谢您的帮助。

    的pom.xml:

        <repositories>
          <repository>
              <id>maven2-repository.java.net</id>
              <name>Java.net Repository for Maven</name>
              <url>http://download.java.net/maven/2/</url>
              <layout>default</layout>
          </repository>
      </repositories>
    
      <properties>
          <jersey2.version>2.19</jersey2.version>
          <jaxrs.version>2.0.1</jaxrs.version>
      </properties>
    
      <!-- Dependencies -->
      <dependencies>
    
    
        <!-- JAX-RS -->
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>${jaxrs.version}</version>
        </dependency>
        <!-- Jersey 2.19 -->
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>${jersey2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>${jersey2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${jersey2.version}</version>
        </dependency>
    
         <!-- Servlet Library -->
         <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
             <version>3.1.0</version>
             <scope>provided</scope>
         </dependency>
    
         <!-- Spring dependencies -->
         <!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-core</artifactId>
             <version>4.1.4.RELEASE</version>
         </dependency>
    
         <!-- http://mvnrepository.com/artifact/org.springframework/spring-web -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-web</artifactId>
             <version>4.1.4.RELEASE</version>
         </dependency>
    
         <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
             <version>4.1.4.RELEASE</version>
         </dependency>
    
        <!-- Junit -->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-jersey2-jaxrs</artifactId>
            <version>1.5.0</version>
        </dependency>
      </dependencies>
    

    的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"
      id="WebApp_ID" version="3.0">
    
      <display-name>HelloWorldSpring</display-name>
    
      <servlet>
          <servlet-name>spring-mvc</servlet-name>
          <servlet-class>
              org.springframework.web.servlet.DispatcherServlet
          </servlet-class>
          <load-on-startup>1</load-on-startup>
      </servlet>    
    
      <servlet-mapping>
          <servlet-name>spring-mvc</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
    
      <servlet>
          <servlet-name>jersey-serlvet</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, 
               com.jer.rest
               </param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
          <servlet-name>jersey-serlvet</servlet-name>
          <url-pattern>/rest/*</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.0</param-value>
          </init-param>
          <init-param>
              <param-name>swagger.api.basepath</param-name>
              <param-value>http://localhost:8080/HealthTracker/rest</param-value>
          </init-param>
          <load-on-startup>2</load-on-startup>
      </servlet>
    
       <!-- Other XML Configuration -->
      <!-- Load by Spring ContextLoaderListener -->
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/root-context.xml</param-value>
      </context-param>
    
    
       <!-- Spring ContextLoaderListener -->
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    
    </web-app>
    

3 个答案:

答案 0 :(得分:2)

查看链接https://github.com/swagger-api/swagger-samples/tree/2.0/java

它有关于如何在项目中配置Swagger 3.0的优秀示例(请参阅java-jersey2-webxml示例)。对于早期版本,请检查分支

就ui而言,您可以下载所需的文件,或者只需在pom.xml中添加以下依赖项。

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>swagger-ui</artifactId>
    <version>3.6.1</version>
</dependency>

它将下载必要的ui文件。您可以在项目中复制下载的index.html并编辑网址。

答案 1 :(得分:1)

以下是我认为可以回答你的问题:

  1. 为了能够根据不同的环境配置招摇,那么这些是您可以遵循的步骤:

    i)创建一个Bootstrap类来配置swagger bean(参考:https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5Setting the Api Version with Swagger UI

    ii)使用属性文件中的值设置上述bean中的值,您可以在任何环境中轻松配置代码。

  2. Swagger dist由html / css / image / js文件组成。它不能作为Maven jar依赖项添加。

  3. 希望这有帮助!

答案 2 :(得分:0)

我遇到了同样的问题,并创建了一个库,如果将其包含在Jersey项目中,它将添加swagger 3.0 UI。请看一下codeblog post,其想法是所有昂首阔步的UI静态内容都与库一起打包并在运行时提取。另外,库将负责为不固定的UI创建Web上下文,并调整对openapi.json文件的引用。您将需要在项目中添加2个属性和此代码:

SwaggerContext.addSwaggerServlet(tomcat, context,
    ConfigBuilder.builder(ConfigType.TYPE_SAFE)
            .build()
            .getConfig("swagger"),
    EmailApplication.class);

和属性:

swagger.package="com.itzap"
swagger.apiBaseUrl="http://{application url}"

如果将所有其他配置保留为默认设置,则可以通过以下URL访问swagger UI:

http://{application base URL}/api/v1/swagger