何為Swagger
設計是API開發的基礎。Swagger使API設計變得輕而易舉,為開發人員,架構師和產品所有者提供了易於使用的工具。——官網
1)具有準確的API模型
API設計容易出錯,在建模API時發現和糾正錯誤是非常困難和耗時的。Swagger Editor是第一個使用OpenAPI規範(OAS)設計API的編輯器,並且繼續滿足開發人員使用OAS構建API的需求。編輯器實時驗證您的設計,檢查OAS合規性,並隨時提供視覺反饋。
2)在設計時視覺化
最好的API是針對最終消費者而設計的。像Swagger編輯器和SwaggerHub這樣的Swagger工具為YAML編輯器提供了一個視覺化皮膚,供開發人員使用,並檢視API對最終消費者的外觀和行為。
3)在整個團隊中標準化設計風格
提供共享通用行為,模式和一致的RESTful介面的API將極大地簡化構建它們的人員和想要使用它們的消費者的工作。SwaggerHub配備了內建的API標準化工具,可以使您的API符合您的組織設計指南。
新增依賴
1、pom.xml:
在此新增如下依賴:
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>spring-boot-starter-swagger</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
複製程式碼
啟動類
在Spring Boot專案啟動類上新增@EnableSwagger2註解。
專案配置
在專案的.properties中新增:
#swagger開啟關閉
swagger.enabled=true
複製程式碼
類配置
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
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;
/**
* Swagger2 的配置注入
* @author ligj
*
*/
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Value("${swagger.enabled}")
private boolean enable;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).enable(enable)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxx.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("你的title")
.description("xxx 專案RestAPI文件")
.termsOfServiceUrl("...")
.version("1.0")
.build();
}
}
複製程式碼
攔截器
如果有設定攔截器,那麼需要放行swagger。
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/swagger-resources/**", "/webjars/**","/v2/**", "/swagger-ui.html/**"); //放行swagger;
}
複製程式碼
如果專案中沒有攔截器,並且遇到了No mapping found for HTTP request with URI [/swagger-resources/configuration/ui] in DispatcherServlet with name 'dispatcherServlet'
,那麼需要新增WebMvcConfigurerConfig:
package com.lamarsan.livelihood_background.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* className: WebMvcConfigurerConfig
* description: TODO
*
* @author hasee
* @version 1.0
* @date 2019/8/12 10:02
*/
@Configuration
@EnableWebMvc
public class WebMvcConfigurerConfig implements WebMvcConfigurer {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.setAllowCredentials(true);
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
return corsConfiguration;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
複製程式碼
常用API
常用註解有:
1、Api
2、ApiModel
3、ApiModelProperty
4、ApiOperation
5、ApiParam
6、ApiResponse
7、ApiResponses
8、ResponseHeader
Api註解
Api用在類上,說明該類的作用,可以標記一個Controller類作為swagger文件資源,標記在類上,使用方式:
@Api(tags = "資訊")
public class Controller{
...
}
複製程式碼
屬性配置
屬性名稱 | 備註 |
---|---|
value | url的路徑值 |
tags | 如果設定這個值,value的值會被覆蓋 |
description | 對api資源的描述 |
basePath | 基本路徑可以不配置 |
position | 如果配置多個Api 想改變顯示的順序位置 |
produces | For example, "application/json, application/xml" |
consumes | For example, "application/json, application/xml" |
protocols | Possible values: http, https, ws, wss. |
authorizations | 高階特性認證時配置 |
hidden | 配置為true 將在文件中隱藏 |
ApiOperation註解
用在方法上,說明方法的作用,每一個url資源的定義,使用方式:
@ApiOperation(value = "your describle")
@RequestMapping(value = "/xxx",method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public RestResponseModel getSongByUnit(@RequestBody @Validated UnitDTO unitDTO, @ApiIgnore ReqUser reqUser){
your code
}
複製程式碼
屬性配置
屬性名稱 | 備註 |
---|---|
value | url的路徑值 |
tags | 如果設定這個值、value的值會被覆蓋 |
description | 對api資源的描述 |
basePath | 基本路徑可以不配置 |
position | 如果配置多個Api 想改變顯示的順序位置 |
produces | For example, "application/json, application/xml" |
consumes | For example, "application/json, application/xml" |
protocols | Possible values: http, https, ws, wss. |
authorizations | 高階特性認證時配置 |
hidden | 配置為true 將在文件中隱藏 |
response | 返回的物件 |
responseContainer | 這些物件是有效的 "List", "Set" or "Map".,其他無效 |
httpMethod | "GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS" and "PATCH" |
code | http的狀態碼 預設 200 |
extensions | 擴充套件屬性 |
ApiParam註解
ApiParam為請求屬性,使用方式:
public ResponseEntity<User> createUser(@RequestBody @ApiParam(value = "Created user object", required = true) User user)
複製程式碼
屬性配置
屬性名稱 | 備註 |
---|---|
name | 屬性名稱 |
value | 屬性值 |
defaultValue | 預設屬性值 |
allowableValues | 可以不配置 |
required | 是否屬性必填 |
access | 不過多描述 |
allowMultiple | 預設為false |
hidden | 隱藏該屬性 |
example | 舉例子 |
ApiModelProperty註解
描述一個model的屬性,具體用法如下:
@ApiModelProperty(value = "your describle")
private String id;
複製程式碼
swagger頁面
執行springboot專案後,在瀏覽器中輸入http://localhost:8080/swagger-ui.html#/,頁面效果如圖所示: