1、前言
在上一篇文章中使用了SpringBoot整合Swagger2,搭建Restful API在線文檔( 鏈接 )。但是有大佬開發出了功能更加強大的在線文檔框架——Swagger-Bootstrap-UI,現在已經更名為Knife4j,因為僅僅一個Swagger-Bootstrap-UI皮膚已經不能滿足開發者的需求,需要增加更多的服務端代碼來滿足開發者的需求,所以更改后的Knife4j不僅僅將前身的Ui皮膚通過Vue技術棧進行了重寫,也增加了更多個性化的特性增強功能,基於springfox項目以及OpenAPI的規范,當然它也是基於Swagger的。Knife4j目前主要支持以Java開發為主,並且是依賴於大環境下使用的Spring MVC、Spring Boot、Spring Cloud框架。當然,Knife4j也提供了離線版本,只要是符合Swagger的OpenAPI版本的規范JSON,都可以通過簡單的配置進行適配,離線版本是適合於任何語言中使用Swagger的,非常的靈活、方便。
- 該開源項目GitHub地址:https://github.com/xiaoymin/Swagger-Bootstrap-UI
- 該開源項目中文文檔地址(knife4j):https://doc.xiaominfo.com
下面使用SpringBoot來整合Knife4j,如下所示:
2、添加Maven依賴
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.7</version> </dependency>
3、創建Config配置類
基於之前例子的代碼:
@Configuration @EnableSwagger2WebMvc public class SwaggerConfig { @Bean public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.thr.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder() // 頁面標題 .title("標題:springboot整合Knife4j項目API文檔") // 項目描述 .description("描述:springboot整合Knife4j項目API文檔") // 服務條款網址 .termsOfServiceUrl("https://www.cnblogs.com/tanghaorong") // 作者信息 .contact(new Contact("唐浩榮","www.tanghaorong.com","XXXXXX@qq.com")) // 許可證 .license("Apache 3.0") // 版本號 .version("v1.0") .build(); } }
4、編寫Restful接口
注意:Swagger的注解同樣適用於Knife4j,因為它本來就是在Swagger的基礎上來設計這個框架的。
package com.thr.controller; import com.thr.entity.User; import com.thr.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @Api(value = "用戶",tags = "用戶信息模塊") @RestController @RequestMapping(value = "/user") public class UserController { @Autowired private UserService userService; /** * 查詢所有用戶信息 * @return */ @GetMapping(value = "/findAll") @ApiOperation(value = "查詢所有用戶信息", notes = "獲取所有用戶信息") public List<User> findAll(){ List<User> userList = userService.findAll(); return userList; } /** * 根據id查詢用戶信息 * @param id * @return */ @GetMapping(value = "/findUserById/{id}") @ApiOperation(value = "根據id查詢用戶信息", notes = "根據id獲取用戶信息") public User findUserById(@PathVariable(value = "id") Integer id){ return userService.findUserById(id); } /** * 添加用戶信息 * @param user */ @PostMapping(value = "/addUser") @ApiOperation(value = "添加用戶信息") public void addUser(User user){ user.setUsername("John"); user.setPassword("123456"); user.setAge(22); user.setAddress("中國重慶"); userService.addUser(user); } /** * 修改用戶信息 * @param user */ @PutMapping(value = "/updateUserById") @ApiOperation(value = "修改用戶信息") public void updateUserById(User user){ user.setId(3L); user.setUsername("Marry"); user.setPassword("123456"); user.setAge(20); user.setAddress("中國湖南"); userService.updateUserById(user); } /** * 刪除用戶信息 * @param id */ @DeleteMapping(value = "/deleteUserById/{id}") @ApiOperation(value = "刪除用戶信息") public void deleteUserById(@PathVariable(value = "id") Integer id){ System.out.println("Delete請求..."); userService.deleteUserById(id); } }
5、啟動項目並測試
啟動項目,如果沒有報錯,然后訪問地址:http://localhost:{自己設置的端口}/doc.html 即可。我的地址為:http://localhost:8080/doc.html#/home 效果圖,如下:
測試接口(這里就測試一個查詢所有用戶信息),效果圖如下:
可以發現使用Knife4j的調試很像PostMan來測試接口。