1. 程式人生 > >springmvc與swagger2整合

springmvc與swagger2整合

由於springboot整合swagger2非常簡單,現在springmvc在實際的專案當中非常多,所以有必要說一下springmvc和swagger2的整合,網上參照的資料非常多,大致都說的是一樣的,多次測試才成功;

swagger優點:

  • 一個檔案就是一個文件
  • 只針對API,而不針對特定的語言的API,很多自動生成API的工具基本都是隻針對特定的API的
  • 支援Json和yaml來編寫API文件,並且支援匯出為json、yaml、markdown等格式
  • 如果編寫好了API了,可以自動生成相應的SDK,沒錯,可能你的API介面程式碼還沒有開始寫,它就能幫你製作相應的SDK了,而且支援幾乎所有主流程式語言的SDK
  • 支援自動生成大量主流程式語言/框架的server端
  • 介面清晰,無論是editor的實時展示還是ui的展示都十分人性化,其他的API編寫工具基本上都做不到這一點,如果自己僅僅用markdown來編寫,又要糾結該如何展現,十分痛苦。
  • 官網有直接的demo,甚至都可以不用自己搞一套伺服器
  最終要一點:不用postman來測試介面,這樣給我們開發節省非常多的時間

   springmvc整合swagger2有兩種方式

   1 在pom檔案中新增springfox-swagger-ui就無需從官網下載靜態資源了(推薦)

  1.1 在pom檔案中新增依賴

<!-- 	swagger配置 -->
	<!--引入Spring依賴包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.framework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.7.0</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.7.0</version>
		</dependency>

1.2 新增配置開始swagger文件

package com.people2000.mzadmin.swaggerConfig; 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

	@Bean
	public Docket api() {
		return new Docket(DocumentationType.SWAGGER_2)
				.select()
				.apis(RequestHandlerSelectors.any())
				.build()
				.apiInfo(apiInfo());
	}
	
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title("醫谷藥區介面API 文件")
				.description("HTTP對外開放介面")
				.version("1.0.0")
				.termsOfServiceUrl("http://xxx.xxx.com")
				.license("LICENSE")
				.licenseUrl("http://xxx.xxx.com")
				.build();
	}

}

1.3 在spring-mvc中新增配置

<!-- swagger2 配置 -->
	<!-- 預設的註解對映的支援 ,它會自動註冊DefaultAnnotationHandlerMapping 與AnnotationMethodHandlerAdapter -->
	<mvc:annotation-driven />
	<!-- 開啟自動掃描  掃描controller-->
	<context:component-scan base-package="com.people2000.mzadmin"></context:component-scan>
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	<mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/" />
	<mvc:resources mapping="/webjars/**"
		location="classpath:/META-INF/resources/webjars/" />

1.4 在web.xml中配置

<servlet>
		<servlet-name>web</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-web.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>
	<!-- <servlet-mapping>
		<servlet-name>web</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>-->
	<servlet-mapping> 
		<servlet-name>web</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
 	<!-- <filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>  -->
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

1.5 請求地址

 localhost:port/專案名稱/swagger-ui.html

1.6 截圖



   2在沒有springfox-swagger-ui的情況下必須下載靜態資源disc目錄下的匯入自己的專案中(不推薦繁瑣,站磁碟)