前後端分離開發,後端需要編寫接⼝說明⽂檔,會耗費⽐較多的時間。
swagger 是⼀個⽤於⽣成伺服器接⼝的規範性⽂檔,並且能夠對接⼝進⾏測試的⼯具。
新增依賴
<!--swagger-->
<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>
寫設定類 SwaggerConfig
/**
* SwaggerConfig 介面檔案設定類
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* 設定介面檔案生成規則
*/
@Bean
public Docket getDocket() {
// 設定檔案生成規則
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) // 設定檔案資訊
.select()
// 設定哪個包下的類需要生成檔案
.apis(RequestHandlerSelectors.basePackage("com.luis.fmmall.controller"))
.paths(PathSelectors.any()) // 定義哪些路徑的介面需要生成檔案
.build();
}
/**
* 設定檔案資訊
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("xxx介面檔案")
.description("這裡是相關描述")
.version("1.0")
.contact(new Contact("luis",
"https://www.cnblogs.com/luisblog",
"[email protected]"))
.build();
}
}
在控制器類上使用 Swagger 的註解進行相關說明
範例如下:
@RestController
@RequestMapping("/user")
@Api(tags = "使用者管理", value = "提供使用者的登陸、註冊、修改等功能") //類說明
public class UserController {
@Resource
private UserService userService;
@GetMapping("/login")
@ApiOperation(value = "登陸驗證", notes = "使用者登陸檢查") //方法名說明
@ApiImplicitParams({ //引數說明
@ApiImplicitParam(dataType = "string", name = "username", value = "使用者名稱", required = true),
@ApiImplicitParam(dataType = "string", name = "password", value = "使用者密碼", required = false, defaultValue = "123")
})
public ResultVo login(@RequestParam("username") String name,
@RequestParam(value = "password", defaultValue = "123") String pwd) {
return userService.checkLogin(name, pwd);
}
}
啟動 SpringBoot 應用,存取 http://localhost:8080/swagger-ui.html
效果如下:
@Api
:類註解,使用在控制器類上,對類進行說明
控制器類 UserController 範例:
@Api(tags = "使用者管理", value = "提供使用者的登陸、註冊、修改等功能") //類說明
public class UserController {
}
@ApiOperation
:方法註解,使用在方法上,對方法名進行說明
@ApiImplicitParam
和 @ApiImplicitParams
:方法註解,使用在方法上,對方法的形參進行說明
單個形參使用 @ApiImplicitParam
,多個形參使用 @ApiImplicitParams
控制器類 UserController 的 login 方法範例:
@GetMapping("/login")
@ApiOperation(value = "登陸驗證", notes = "使用者登陸檢查") //方法名說明
@ApiImplicitParams({ //引數說明
@ApiImplicitParam(dataType = "string", name = "username", value = "使用者名稱", required = true),
@ApiImplicitParam(dataType = "string", name = "password", value = "使用者密碼", required = false, defaultValue = "123")
})
public ResultVo login(@RequestParam("username") String name,
@RequestParam(value = "password", defaultValue = "123") String pwd) {
return userService.checkLogin(name, pwd);
}
@ApiModel
和 @ApiModelProperty
:當接⼝的形參或返回值為物件型別時,在實體類中新增此註解說明
介面的返回值為 ResultVo 物件範例:
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "ResultVo 物件", description = "返回給前端的封裝資料") //返回的類說明
public class ResultVo {
// 響應給前端的狀態碼
@ApiModelProperty("響應狀態碼") //屬性說明
private int code;
// 響應給前端的提示資訊
@ApiModelProperty("提示資訊") //屬性說明
private String msg;
// 響應給前端的資料
@ApiModelProperty("資料") //屬性說明
private Object data;
}
介面的形參為 User 實體物件範例:
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "User 物件",description = "⽤戶/買家資訊")
public class User {
@ApiModelProperty(dataType = "int",required = false)
private int userId;
@ApiModelProperty(dataType = "String",required = true, value = "⽤
戶註冊賬號")
private String userName;
@ApiModelProperty(dataType = "String",required = true, value = "⽤
戶註冊密碼")
private String userPwd;
@ApiModelProperty(dataType = "String",required = true, value = "⽤
戶真實姓名")
private String userRealname;
@ApiModelProperty(dataType = "String",required = true, value = "⽤
戶頭像url")
private String userImg;
}
@ApiIgnore
:接⼝⽅法註解,新增此註解的⽅法將不會⽣成到接⼝⽂檔中
發現一個規律,越學到最後,越是有驚喜,有不有?
swagger-ui 外掛是一款 UI 美化外掛,是基於 swagger 的。
之前使用的預設 swagger 檔案和偵錯頁面如果使用起來不太順暢,可以試試這款 swagger-ui 外掛。
新增依賴
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
重啟 SpringBoot 應用,存取 http://localhost:8080/doc.html
效果如下:
還等什麼,趕緊裝外掛去~
都看到最後了,右下角來個贊鴨!-.- 歡迎評論留言~