java開發的小伙伴對swagger並不陌生,swagger節省了開發人員很多時間,但是筆者在使用的時候總覺得欠缺點什么,就是它的“非國人”UI。看起來十分不爽,相比於swagger,JApiDocs看起來更符合國人的審美觀。但是JApiDocs缺不能像swagger一樣在線調試。而Knife4j解決了這一問題,它不但能在線調試接口,還有國人審美觀的UI。
Knife4j的前身是swagger-bootstrap-ui,為了契合微服務的架構發展,由於原來swagger-bootstrap-ui采用的是后端Java代碼+前端Ui混合打包的方式,在微服務架構下顯的很臃腫,因此項目正式更名為knife4j。
Knife4j源碼:https://github.com/xiaoymin/swagger-bootstrap-ui
Knife4j Demo源碼:https://gitee.com/xiaoym/swagger-bootstrap-ui-demo
廢話不多說,開搞!!!
我們仍然在之前搭建的x-demo-service基礎上集成Knife4j
1、修改根項目spring-cloud-x的build.gradle配置文件,第4行增加knife4j依賴。
1 dependencyManagement { 2 imports { mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}") } 3 imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } 4 imports { mavenBom "com.github.xiaoymin:knife4j-dependencies:2.0.5" } 5 }
2、修改子模塊x-demo-service的build.gradle文件,增加knife4j-spring-boot-starter依賴
1 dependencies { 2 compile project(":x-demo-service-api") 3 4 compile("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client") 5 compile("com.github.xiaoymin:knife4j-spring-boot-starter") 6 }
3、新建Knife4j配置JAVA類
1 /** 2 * @author Leo 3 */ 4 @EnableSwagger2 5 @EnableKnife4j 6 @Configuration 7 public class Knife4jConfig { 8 9 @Bean(value = "defaultApi2") 10 public Docket defaultApi2() { 11 Docket docket = new Docket(DocumentationType.SWAGGER_2) 12 .apiInfo(apiInfo()) 13 .groupName("這是一個分組名稱") 14 .select() 15 .apis(RequestHandlerSelectors.basePackage("com.x.demo.controller")) 16 .paths(PathSelectors.any()) 17 .build(); 18 return docket; 19 } 20 21 private ApiInfo apiInfo() { 22 return new ApiInfoBuilder() 23 .title("x-demo-service接口文檔") 24 .description("x-demo-service接口文檔") 25 .termsOfServiceUrl("https://www.cnblogs.com/shileibrave/") 26 .contact(new Contact("Leo", "https://www.cnblogs.com/shileibrave/", "shileibrave@163.com")) 27 .version("1.0") 28 .build(); 29 } 30 }
4、修改Controller類
修改了第4行,第12行。@Api和@ApiOperation都是swagger注解,不明白swagger注解的自己惡補吧。
1 /** 2 * @author Leo 3 */ 4 @Api(tags = "DemoApiProviderController") 5 @RestController 6 @Slf4j 7 public class DemoApiProviderController implements ServiceDemoApi { 8 9 @Value("${server.port}") 10 String port; 11 12 @ApiOperation(value = "sayHello接口") 13 @Override 14 public BaseResponse sayHello(BaseRequest request) { 15 BaseResponse response = new BaseResponse(); 16 response.setCode("0000"); 17 response.setMessage("success"); 18 response.setData("ServiceDemoApi: " + port); 19 return response; 20 } 21 }
5、重啟x-demo-service服務
在瀏覽器中輸入:http://localhost:8081/doc.html,Knife4j主頁
查看sayHello接口文檔
調試sayHello接口
到此單體服務集成Knife4j完成,后面將SpringCloud網關的時候,再說一下網關和Knife4j如何集成。