Swagger優勢:給我們提供了一個全新的維護API文檔的方式
一、創建springboot工程
可以通過Spring Initializr頁面生成一個空的Spring Boot項目,當然也可以下載springboot-pom.xml文件,然後使用Maven構建一個Spring Boot項目。項目創建完成後,爲了方便後面代碼的編寫您可以將其導入到您喜歡的IDE中,使用工具Intelli IDEA打開
二、依賴pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xiaolonghong</groupId>
<artifactId>Swaggerdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Swaggerdemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
三、編寫接口
1.創建三個包:cn.xiaolonghong.sbswagger.controller、cn.xiaolonghong.sbswagger.testcontroller、cn.xiaolonghong.sbswagger.model
2.在controller新建UserController.java類,testcontroller包下新建TestController.java類,在model包新建User.java類
UserController.java
註明L:提供用戶的增、刪、查、改、四個接口
package cn.xiaolonghong.sbswagger.controller;
import cn.xiaolonghong.sbswagger.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
/**
1. 瀏覽器訪問swagger-ui效果: http://localhost:8080/swagger-ui.html
2. 在Spring Boot項目中集成了Swagger2,啓動項目後,
我們可以通過在瀏覽器中訪問 http://localhost:8080/v2/api-docs 來驗證,
你會發現返回的結果是一段JSON串,可讀性非常差。
@ApiIgnore: Swagger文檔不會顯示擁有該註解的接口。
@ApiImplicitParams: 用於描述接口的非對象參數集。
@ApiImplicitParam: 用於描述接口的非對象參數,一般與@ApiImplicitParams組合使用。
@ApiOperation: 可設置對接口的描述。
註解屬性 類型 描述
value String 接口說明。
notes String 接口發佈說明。
tags Stirng[] 標籤。
response Class<?> 接口返回類型。
httpMethod String 接口請求方式。
註解屬性 描述
paramType 查詢參數類型,實際上就是參數放在那裏。取值: path:以地址的形式提交數據,根據id查詢用戶的接口就是這種形式傳參。 query:Query string的方式傳參。 header:以流的形式提交。 form:以Form表單的形式提交。
dataType 參數的數據類型。取值:Long,String
name 參數名字。
value 參數意義的描述。
required 是否必填。取值:true:必填參數,false:非必填參數。
註明:springboot-集成swagger教程及配置: https://itweknow.cn/blog-site/posts/2111459879.html
*/
@RestController
@RequestMapping("/user")
@Api(tags = "用戶相關接口", description = "提供用戶相關的Rest API")
public class UserController {
@ApiOperation("更新用戶信息接口")
@PutMapping("/update")
public boolean update(@RequestBody User user) {
return true;
}
@ApiOperation("刪除用戶接口")
@DeleteMapping("/delete/{id}")
@ApiIgnore
public boolean delete(@PathVariable("id") int id) {
return true;
}
@ApiOperation("新增用戶接口")
@PostMapping("add")
public boolean addUser(@RequestBody User user){
return false;
}
@ApiOperation("通過id查找用戶接口")
@GetMapping("/find/{id}")
public User findById(@PathVariable("id") int id) {
return new User();
}
}
TestController.java
註明:提供一個測試接口
package cn.xiaolonghong.sbswagger.testcontroller;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 提供一個測試接口
*/
@RestController
@RequestMapping("test")
@Api(tags = "測試相關接口", description = "提供測試相關的Rest API")
public class TestController {
@GetMapping("/test")
public void test(){
System.out.println("test");
}
}
User.java
package cn.xiaolonghong.sbswagger.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/*
接口相關注解
@ApiModel: 可設置接口相關實體的描述。
@ApiModelProperty: 可設置實體屬性的相關描述。
註解屬性 類型 描述
value String 字段說明。
name String 重寫字段名稱。
dataType Stirng 重寫字段類型。
required boolean 是否必填。
example Stirng 舉例說明。
hidden boolean 是否在文檔中隱藏該字段。
allowEmptyValue boolean 是否允許爲空。
allowableValues String 該字段允許的值,當我們API的某個參數爲枚舉類型時,使用這個屬性就可以清楚地告訴API使用者該參數所能允許傳入的值。
*/
@ApiModel("用戶實體")
public class User {
/**
* 用戶Id
*/
@ApiModelProperty("用戶id")
private int id;
/**
* 用戶名
*/
@ApiModelProperty("用戶姓名")
private String name;
/**
* 用戶地址
*/
@ApiModelProperty("用戶地址")
private String address;
public int getId() {
return id;
}
public User setId(int id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public User setName(String name) {
this.name = name;
return this;
}
public String getAddress() {
return address;
}
public User setAddress(String address) {
this.address = address;
return this;
}
}
四、自定義響應信息
在config包下新建SwaggerConfig.java
package cn.xiaolonghong.sbswagger.config;
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMethod;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.Collections;
import static com.google.common.collect.Lists.newArrayList;
/**
* @Configuration 告訴Spring Boot需要加載這個配置類
* @EnableSwagger2 啓用Swagger2,如果沒加的話自然而然也就看不到後面的驗證效果
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("cn.xiaolonghong.sbswagger.controller"))
.paths(Predicates.or(PathSelectors.ant("/user/add"),
PathSelectors.ant("/user/find/*")))
.build()
.apiInfo(apiInfo())
.useDefaultResponseMessages(false)
.globalResponseMessage(RequestMethod.GET, newArrayList(
new ResponseMessageBuilder()
.code(500)
.message("服務器發生異常")
.responseModel(new ModelRef("Error"))
.build(),
new ResponseMessageBuilder()
.code(403)
.message("資源不可用")
.build()
));
}
private ApiInfo apiInfo() {
return new ApiInfo(
"Spring Boot項目集成Swagger實例文檔",
"我的CSDN博客網站:https://blog.csdn.net/qq_41086359,歡迎大家訪問。",
"API V1.0",
"Luyi of service",
new Contact("lIUYI", "https://blog.csdn.net/qq_41086359", "[email protected]"),
"Apache", "http://www.apache.org/", Collections.emptyList());
}
}
五、編寫一個啓動類
App.java
package cn.xiaolonghong.sbswagger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
六、瀏覽器訪問
1. 瀏覽器訪問swagger-ui效果: http://localhost:8080/swagger-ui.html 2. 在Spring Boot項目中集成了Swagger2,啓動項目後, 我們可以通過在瀏覽器中訪問 http://localhost:8080/v2/api-docs 來驗證, 你會發現返回的結果是一段JSON串,可讀性非常差。
效果圖