Swagger詳解(SpringBoot+Swagger集成)


Swagger-API文檔接口引擎
Swagger是什么
Swagger是一個規范和完整的框架,用於生成、描述、調用和可視化 RESTful 風格的 Web 服務。總體目標是使客戶端和文件系統作為服務器以同樣的速度來更新。文件的方法,參數和模型緊密集成到服務器端的代碼,允許API來始終保持同步。

在項目開發中,根據業務代碼自動生成API文檔,給前端提供在線測試,自動顯示JSON格式,方便了后端與前端的溝通與調試成本。

Swagger有一個缺點就是侵入性模式,必須配置在具體的代碼里。

Swagger使用(SpringBoot+Swagger集成)
新建Maven項目

第一種方式:使用第三方依賴

1.在pom.xml文件中添加第三方swagger依賴

<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>
2、在Spring Boot項目的啟動類上添加@EnableSwagger2,啟動Swagger 
3、https://github.com/SpringForAll/spring-boot-starter-swagger,GitHub上這個swagger依賴實現的項目,里面有詳細的講解。

第二種方式:使用官方依賴

1.在pom.xml文件中添加swagger相關依賴

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
 第一個是API獲取的包

第二是官方給出的一個ui界面,這個界面可以自定義,默認是官方的

第三個是測試數據以JSON格式返回的依賴包

2.配置Swagger 

新建Swagger配置類,需要特別注意的是Swagger scan base package,這是掃描注解的配置,即你的API接口位置,對前端提供服務接口的位置。

package com.example.demo.config;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("API接口文檔")
.description("用戶信息管理")
.version("1.0.0")
.build();
}
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) //這里寫的是API接口所在的包位置

.paths(PathSelectors.any())
.build();
}
}
3.簡單寫個Dao和User實體類

package com.example.demo.dao;

import com.example.demo.entity.User;
public interface UserDao {
User findById(Integer id);
User findByName(String name);

}



public class User {
int id;//用戶ID
String name;//姓名

public void setId(int id){

this.id=id;
}
public int getId(){

return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){

return name;
}
4.撰寫Controller(UserController)

@RestController
@RequestMapping("/user")
@Api(value = "用戶信息管理")
public class UserController {
UserDao userDao;

@RequestMapping(method = RequestMethod.POST,value = "/userById")
@ApiOperation(value = "獲取用戶信息", notes = "通過用戶ID獲取用戶信息")
public Object findById(@ApiParam(value = "用戶ID",required = true) int id){
return userDao.findById(id);
}

@RequestMapping(method = RequestMethod.POST,value = "/userByName")
@ApiOperation(value = "獲取用戶信息", notes = "通過用戶姓名獲取用戶信息")
public Object findByName(@ApiParam(value = "用戶姓名",required = true) String name){
return userDao.findByName(name);
}

}
5.設定訪問API文檔的路由

在配置文件中,application.yml中聲明:

springfox.documentation.swagger.v2.path: /api-docs

這個path就是json的訪問request mapping.可以自定義,防止與自身代碼沖突。

API doc的顯示路由是:http://localhost:8080/swagger-ui.html

 

 

Swagger常用注解
1、Api標記

Api 用在類上,說明該類的作用。可以標記一個Controller類做為swagger 文檔資源,使用方式:
@Api(value = "/user", description = "Operations about user") 

 

 

2、ApiOperation標記

ApiOperation:用在方法上,說明方法的作用,每一個url資源的定義,使用方式:

@ApiOperation(

          value = "Find purchase order by ID",

          notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions",

          response = Order,

          tags = {"Pet Store"})

 

3、ApiParam標記

ApiParam請求屬性,使用方式:

public ResponseEntity<User> createUser(@RequestBody @ApiParam(value = "Created user object", required = true)  User user)

 

4.  ApiResponse

ApiResponse:響應配置,使用方式: 
@ApiResponse(code = 400, message = "Invalid user supplied") 

 

5.  ApiResponses

ApiResponses:響應集配置,使用方式: 
@ApiResponses({ @ApiResponse(code = 400, message = "Invalid Order") }) 

6.  ResponseHeader

響應頭設置,使用方法 
@ResponseHeader(name="head1",description="response head conf") 

 

@Api()用於類; 
表示標識這個類是swagger的資源 
@ApiOperation()用於方法; 
表示一個http請求的操作 
@ApiParam()用於方法,參數,字段說明; 
表示對參數的添加元數據(說明或是否必填等) 
@ApiModel()用於類 
表示對類進行說明,用於參數用實體類接收 
@ApiModelProperty()用於方法,字段 
表示對model屬性的說明或者數據操作更改 
@ApiIgnore()用於類,方法,方法參數 
表示這個方法或者類被忽略 
 @ApiImplicitParam() 用於方法 
表示單獨的請求參數 
 @ApiImplicitParams() 用於方法,包含多個 @ApiImplicitParam
 @Api() 
用於類;表示標識這個類是swagger的資源 
tags–表示說明 
value–也是說明,可以使用tags替代 
但是tags如果有多個值,會生成多個list

@Api(value="用戶controller",tags={"用戶操作接口"})

@RestController 

public class UserController {

}

@ApiOperation() 用於方法;表示一個http請求的操作 
value用於方法描述 
notes用於提示內容 
tags可以重新分組(視情況而用) 
@ApiParam() 用於方法,參數,字段說明;表示對參數的添加元數據(說明或是否必填等) 
name–參數名 
value–參數說明 
required–是否必填

@ApiModel()用於類 ;表示對類進行說明,用於參數用實體類接收 
value–表示對象名 
description–描述 
都可省略 
@ApiModelProperty()用於方法,字段; 表示對model屬性的說明或者數據操作更改 
value–字段說明 
name–重寫屬性名字 
dataType–重寫屬性類型 
required–是否必填 
example–舉例說明 
hidden–隱藏

@ApiIgnore()用於類或者方法上,可以不被swagger顯示在頁面上 
比較簡單, 這里不做舉例

@ApiImplicitParam() 用於方法 
表示單獨的請求參數 
@ApiImplicitParams() 用於方法,包含多個 @ApiImplicitParam 
name–參數ming 
value–參數說明 
dataType–數據類型 
paramType–參數類型 
example–舉例說明
————————————————

 

 

 

參考鏈接:https://blog.csdn.net/ai_miracle/article/details/82709949


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM