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