SpringMvc 集成構建 Swagger

Springmvc項目中集成Swagger。

步驟

一,

maven的pom片段:   下面的swagger 1 與 swagger 2 的配置都可以, 參照一部分就可以,都能跑起來。

————————————————————————————————

<!-- swagger 1 -->

<dependency>
   <groupId>com.mangofactory</groupId>
   <artifactId>swagger-springmvc</artifactId>
   <version>1.0.2</version>
   <!-- swagger-springmvc 依賴spring-web 3.*.*, 與原工程spring-web:4.3.9衝突,排除原來的依賴版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>com.mangofactory</groupId>
   <artifactId>swagger-models</artifactId>
   <version>1.0.2</version>
   <!-- swagger-springmvc 依賴spring-web 3.*.*, 與原工程spring-web:4.3.9衝突,排除原來的依賴版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>com.wordnik</groupId>
   <artifactId>swagger-annotations</artifactId>
   <version>1.3.11</version>
   <!-- swagger-springmvc 依賴spring-web 3.*.*, 與原工程spring-web:4.3.9衝突,排除原來的依賴版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<!-- swagger-springmvc dependencies -->
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.5.4</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.5.4</version>
</dependency>
<dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>15.0</version>
</dependency>
<dependency>
   <groupId>com.fasterxml</groupId>
   <artifactId>classmate</artifactId>
   <version>1.1.0</version>
</dependency>

<!-- swagger 2 -->
<dependency>
   <groupId>com.mangofactory</groupId>
   <artifactId>swagger-springmvc</artifactId>
   <version>1.0.2</version>
   <!-- swagger-springmvc 依賴spring-web 3.*.*, 與原工程spring-web:4.3.9衝突,排除原來的依賴版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.5.1</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.5.1</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.6.0</version>
</dependency>

————————————————————————————————

二,

springmvc的xml文件中加入以下配置。

1, 註冊Swagger相關類文件。

<!-- 將 springSwaggerConfig加載到spring容器 -->
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
<!-- 將自定義的swagger配置類加載到spring容器 -->
<bean class="com.zstimes.riskManage.util.controller.SwaggerConfig" />

————————————————————————————————

2,對靜態訪問的配置,不被springmvc所攔截。

<!-- 對靜態資源文件的訪問 -->
<mvc:resources mapping="/swagger/**" location="/swagger/" />

————————————————————————————————

三,創建Swagger配置類,SwaggerConfig.java, 與容器定義的bean路徑(上面二的部分)要保持一致。 還有一個測試的Controller類。

SwaggerConfig.java:

package com.zstimes.riskManage.util.controller;

import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;

/**
 * Created by zzd on 2018/4/15.
 */
public class SwaggerConfig {

    private SpringSwaggerConfig springSwaggerConfig;

    /**
     * Required to autowire SpringSwaggerConfig
     */
    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig)
    {
        this.springSwaggerConfig = springSwaggerConfig;
    }

    /**
     * Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc
     * framework - allowing for multiple swagger groups i.e. same code base
     * multiple swagger resource listings.
     */
    @Bean
    public SwaggerSpringMvcPlugin customImplementation()
    {
        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
                .apiInfo(apiInfo())
                .includePatterns(".*?");
    }

    private ApiInfo apiInfo()
    {
        ApiInfo apiInfo = new ApiInfo(
                "Swagger",
                "SpringMvc-API swagger測試",
                "Apps API",
                "RTHD",
                "web app",
                "Apps API License URL");
        return apiInfo;
    }
}

Controller片段:

@Api(value = "user")
@Controller
@RequestMapping("/user")
public class UserController extends AbstractBaseController{
	private static final Logger LOGGER = LogUtil.get();
	

	@Autowired
	private BenQiYeService benQiYeService;

	/**
	 * 
	 * @Title: find 
	 * @Description: 測試
	 * @param req
	 * @return
	 * @return: AjaxResult
	 */
	@RequestMapping(value = "/findPageByCondition",produces = "application/json;charset=UTF-8")
	@ResponseBody
	@ApiOperation(value = "CESI",HhttpMethod="POST",notes="get user by id")


四, 與Swagger-UI整合 

配置了掃描哪些接口,Swagger會把這些接口生成json格式的文檔,json文檔直接看很不人性化,所以用這個Swagger-UI把json格式的文檔轉成頁面! 

1)Swagger-UI官網git下載版本2.10:

下載地址:https://github.com/swagger-api/swagger-ui/tree/v2.2.10

其他版本沒都試過, 版本不對會出現以下問題: 頁面正常顯示,但是就不出現接口文檔,然後下面是這句話。

 No operations defined in spec!



下載這裏面的dist文件夾,把文件夾整個拷貝到你項目工程的webapp的swagger下,swagger自己創建的,這個目錄可以自行定義。
2)找到dist文件夾下的index.html文件,把大概第40行的url改成url = “http://localhost:8080/項目名稱/api-docs”;注意這個api-docs是固定的,不要改! 


五,啓動項目 

瀏覽器輸入http://域名:端口/項目名/dist/index.html 就看到效果了,成功!





整合時遇到的問題:

1,因爲是集成到現有的項目中,現有的項目的spring-web是4.3.9, 但是Swagger-springmvc依賴是的spring-web3.*.*的jar,所以exclusion排除一下。

2,就是整合Swagger-UI的時候發生版本上面說的問題。 目前用的版本是 v2.2.10


發佈了20 篇原創文章 · 獲贊 16 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章