SpringBoot整合Swagger2,3分鐘輕鬆入手!

壹貳叄肆伍i發表於2020-08-23

一、引入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。具體原因可以檢視如下連結,這篇文章說的很詳細!

https://blog.csdn.net/qq122516902/article/details/89673363

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>

相關文章