Swagger 是一個規范和完整的框架,用於生成、描述、調用和可視化 RESTful 風格的 Web 服務。總體目標是使客戶端和文件系統作為服務器以同樣的速度來更新。文件的方法,參數和模型緊密集成到服務器端的代碼,允許API來始終保持同步。
開始
1、pom.xml 添加依賴:
<!-- swagger RESTful API 文檔 -->
<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>
2、創建 User 實體
package com.sam.demo.domain;
/**
* @author sam
* @since 2017/7/17
*/
public class User {
private Long id;
private String name;
private int age;
//getter & setter
}
3、在 Application.java 同級創建 Swagger2.java
package com.sam.demo;
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;
/**
* @author sam
* @since 2017/7/17
*/
@Configuration
@EnableSwagger2
public class Swagger2 {
@Bean
public Docket createRestApi() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("Sam 項目接口文檔")
.description("Magical Sam 項目的接口文檔,符合RESTful API。")
.version("1.0")
.build();
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sam.demo.controller")) //以掃描包的方式
.paths(PathSelectors.any())
.build();
}
}
其中 .apis(RequestHandlerSelectors.basePackage("com.sam.demo.controller")) 指定了以掃描包的方式進行,會把com.sam.demo.controller包下的controller都掃描到。
4、創建 UserController.java
package com.sam.demo.controller;
import com.sam.demo.domain.User;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author sam
* @since 2017/7/14
*/
@Api(value = "用戶模塊")
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 獲取單個用戶
*
* @param id
* @return
*/
@ApiOperation(value = "獲取單個用戶", notes = "傳入id獲取單個用戶")
// @ApiImplicitParam(name = "id", value = "用戶id", required = true, paramType = "path", dataType = "Long") //注意:paramType需要指定為path,不然不能正常獲取
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String user(@ApiParam(value = "用戶Id", required = true) @PathVariable Long id) {
return "user id :" + id;
}
/**
* 獲取用戶列表
*
* @return
*/
@ApiOperation(value = "獲取用戶列表", notes = "獲取用戶列表")
@RequestMapping(value = "", method = RequestMethod.GET)
public List list() {
List list = new ArrayList();
list.add("Sam1");
list.add("Sam2");
list.add("Sam3");
return list;
}
/**
* 新建用戶
*
* @param user
* @return
*/
@ApiOperation(value = "新建用戶", notes = "新建一個用戶")
// @ApiImplicitParams({
//注意:paramType需要指定為body
// @ApiImplicitParam(name = "user", value = "用戶數據", required = true, paramType = "body", dataType = "User")
// })
@RequestMapping(value = "", method = RequestMethod.POST)
public String create(@ApiParam(value = "用戶數據", required = true) @RequestBody User user) {
System.out.println("user : " + user.getName() + " " + user.getAge());
return "success 新建user : " + user.getName() + " " + user.getAge();
}
/**
* 刪除用戶
*
* @return
*/
@ApiOperation(value = "刪除用戶", notes = "通過用戶id刪除用戶")
@ApiImplicitParam(name = "id", value = "用戶id", required = true, paramType = "path", dataType = "Long")
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable Long id) {
System.out.println("刪除用戶:" + id);
return "success 刪除user" + id;
}
/**
* 更新用戶
*
* @return
*/
@ApiOperation(value = "更新用戶", notes = "更新已存在用戶")
@ApiImplicitParam(name = "user", value = "用戶數據", required = true, paramType = "body", dataType = "User")
@RequestMapping(value = "", method = RequestMethod.PUT)
public String update(@RequestBody User user) {
System.out.println("更新用戶:" + user.getId() + " " + user.getName() + " " + user.getAge());
return "success 更新user : " + user.getId() + " " + user.getName() + " " + user.getAge();
}
}
啟動應用,瀏覽器訪問:http://localhost:8080/swagger-ui.html
正常展示 api 接口文檔界面,如下:
注意1:@ApiImplicitParam 和 @ApiParam 方式均能指定參數規則。
注意2:使用@ApiImplicitParam的時候,需要指定paramType。
附:Swagger2相關注解介紹
@Api:用在類上,說明該類的作用
@ApiOperation:用在方法上,說明方法的作用
@ApiImplicitParams:用在方法上包含一組參數說明
@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一個請求參數的各個方面
paramType:參數放在哪個地方
· header --> 請求參數的獲取:@RequestHeader
· query -->請求參數的獲取:@RequestParam
· path(用於restful接口)--> 請求參數的獲取:@PathVariable
· body(不常用)
· form(不常用)
name:參數名
dataType:參數類型
required:參數是否必須傳
value:參數的意思
defaultValue:參數的默認值
@ApiResponses:用於表示一組響應
@ApiResponse:用在@ApiResponses中,一般用於表達一個錯誤的響應信息
code:數字,例如400
message:信息,例如"請求參數沒填好"
response:拋出異常的類
@ApiModel:描述一個Model的信息(這種一般用在post創建的時候,使用@RequestBody這樣的場景,請求參數無法使用@ApiImplicitParam注解進行描述的時候)
@ApiModelProperty:描述一個model的屬性
版權聲明:本文為博主原創文章,轉載請注明出處。