一、引入maven
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2.9.2版本,該版本有個小坑後面會提到
二、建立一個Swagger配置類
@Configuration
@EnableSwagger2//開啟Swagger2的自動配置
@Profile({"dev", "pred"})
public class SwaggerConfig {
@Bean
public Docket peopleDeptApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo("人才庫", "人才庫-人員,部門介面文件", "1.0"))
.select()
.apis(RequestHandlerSelectors.basePackage("com.allqj.platform_base_organization.base.controller"))
.paths(PathSelectors.any())
.build()
.groupName("人員,部門API");
}
@Bean
public Docket brokerApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo("人才庫", "人才庫-經紀人介面文件", "1.0"))
.select()
.apis(RequestHandlerSelectors.basePackage("com.allqj.platform_base_organization.broker.controller"))
.paths(PathSelectors.any())
.build()
.groupName("經紀人API");
}
@Bean
public Docket dictionaryApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo("人才庫", "人才庫-字典介面文件", "1.0"))
.select()
.apis(RequestHandlerSelectors.basePackage("com.allqj.platform_base_organization.dictionary.controller"))
.paths(PathSelectors.any())
.build()
.groupName("字典API");
}
private ApiInfo apiInfo(String title, String description, String version) {
return new ApiInfoBuilder().title(title).description(description).version(version).build();
}
}
三、防止中文分組亂碼
在application.yml檔案裡配置
spring:
http:
encoding:
charset: UTF-8
force: true
enabled: true
server:
tomcat:
uri-encoding: UTF-8
如果還是讀取不到,清除瀏覽器快取
四、分組配置就好了,訪問專案路徑/swagger-ui.html就ok了
五、修復 swaggerfox 升級 2.9.2版本問題
開始的時候我有提到:整合Swagger新版本中,有一個小坑。這裡具體說明下,當我們使用版本2.9.2時候,如果專案實體中有Integer型別的屬性,當我們開啟Api文件的時候會出現一個警告資訊:
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_221]
at java.lang.Long.parseLong(Long.java:601) ~[na:1.8.0_221]
at java.lang.Long.valueOf(Long.java:803) ~[na:1.8.0_221]
at io.swagger.models.parameters.AbstractSerializableParameter.getExample(AbstractSerializableParameter.java:412) ~[swagger-models-1.5.20.jar:1.5.20]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:687) [jackson-databind-2.9.7.jar:2.9.7]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719) [jackson-databind-2.9.7.jar:2.9.7]
解決方案
排除springfox-swagger2 引入的 swagger-models 1.5.20版本,手動引入1.5.21版本的jar。具體原因可以檢視如下連結,這篇文章說的很詳細!
pom.xml配置如下
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
<exclusions>
<exclusion>
<artifactId>swagger-models</artifactId>
<groupId>io.swagger</groupId>
</exclusion>
</exclusions>
</dependency>
<!--手動引入 swagger-models 的 1.5.21 版本解決java.lang.NumberFormatException: For input string: "" 錯誤-->
<dependency>
<artifactId>swagger-models</artifactId>
<groupId>io.swagger</groupId>
<version>1.5.21</version>
</dependency>