在SpringBoot中可以集成代码插件自动生成接口文档,而且生成的文档很漂亮,除了接口功能介绍、传入参数、响应参数,还具体类似postman的功能,可调用接口进行测试,另外还可以下单WORD版、.md,html格式的文档。下面我们先看下接口文档的展示效果:
下面是实体类参数说明界面:
下面是文档下载界面:
下载的MD文件:
html界面:
类似PostMan的 在线调试界面:
提供JS和TS的调用示例:
在线接口文档生成插件可以帮助我们生成可交付的接口文档,大大节省了项目交付的编写开发文档时间。接下来我介绍下如何在SpringBoot中整合在线接口文档插件。
这个接口文档插件交knife4j,是一个集Swagger2和OpenAPI3为一体的增强解决方案。首先我们在openjweb-cloud的主工程中增加knife4j的依赖、lombok依赖(这个使用@Data注解,在实体类中使用),阿里的fastjson(测试接口返回的用JSON结构不能在文档中生成响应参数的说明):
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency> <!-- knife4j --> <dependency> <groupId>com.github.xiaoymin</groupId> <!--<artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.4</version>--> <artifactId>knife4j-openapi2-spring-boot-starter</artifactId> <version>4.4.0</version> </dependency>
然后在openjweb-sys子工程的org.openjweb.config下增加一个Swagger2配置类,代码如下:
@Configuration //@EnableSwagger2 @EnableSwagger2WebMvc //@EnableKnife4j public class Swagger2Config { @Bean(value = "dockerBean") public Docket dockerBean() { //指定使用Swagger2规范 Docket docket=new Docket(DocumentationType.SWAGGER_2) .apiInfo(new ApiInfoBuilder().title("OpenJWeb低代码平台开发文档") //描述字段支持Markdown语法 .description("# OpenJWeb低代码开发平台WXID: openjweb") //产品简介 .termsOfServiceUrl("https://github.com/openjweb/cloud/tree/master")//API服务条款 .contact("29803446@qq..com")//联系人 .version("1.0")//版本号 .build()) //分组名称 .groupName("OpenJWeb低代码平台")//左上角搜索框---分组名称 .select() //这里指定Controller扫描包路径 .apis(RequestHandlerSelectors.basePackage("org.openjweb")) .paths(PathSelectors.any()) .build(); return docket; } }
注意每个参数对应首页的显示位置可以看首页的图。这些参数指定了文档标题、项目介绍、服务条款、联系人、版本号等。
接下来创建一个实体类CommUser,因为后面示例接口需要返回一个CommUser类型的返回值,在文档中可自动展示返回值说明,下面在org.openjweb.sys.entity下创建一个CommUser类:
package org.openjweb.sys.entity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class CommUser { @ApiModelProperty(value ="登录账号",required = true) private String loginId; @ApiModelProperty(value ="用户昵称") private String username; @ApiModelProperty(value ="真实姓名") private String realName; @ApiModelProperty(value ="用户性别:男M 女F") private String userSex; }
注意每个属性都增加@ApiModelProperty注解,这样文档中可以显示相应的参数说明。
然后我们创建一个Controller类或者API类,在org.openjweb.sys.api下建一个接口类:
@RestController @RequestMapping("/ucenter") @Api(tags = "admin-用户管理") public class CommUserApi { @ApiOperation("用户详情") @ApiImplicitParams({ @ApiImplicitParam(name = "username", value = "用户名称", paramType = "query"), @ApiImplicitParam(name = "province", value = "所属省份", paramType = "query") }) @GetMapping("info") public CommUser getUserInfo(@RequestParam(value = "username")String username, @RequestParam(value = "province")String province){ //public CommUser getUserInfo( String username, String province){ CommUser user = new CommUser(); user.setUserSex("男"); user.setUsername(username); user.setRealName("王先生"); user.setLoginId("abao"); return user; } }
类头部标注此类的接口说明@Api(tags = "admin-用户管理"),这个在文档展示的时候是一个菜单组,然后方法上也增加注解@ApiOperation("用户详情"),这个描述接口的功能,然后@ApiImplicitParams,是接口参数说明,注意接口参数的命名需要和方法参数的(@RequestParam的命名保持一致。
接下来在openjweb-sys子工程的resource目录下建2个文件,一个是application.yml,存放标准配置,一个application-dev.yml是个性化参数配置,application.yml里:
spring: profiles: active: dev
指定当前使用application-dev.yml
application-dev.yml里指定启动端口:
server: port: 8001
配置好以后启动系统管理的应用OpenjwebSysApplication,启动后访问:
http://localhost:8001/ucenter/info?username=2&province=2
接口文档访问地址:
http://localhost:8001/doc.html
显示帮助文档界面:
项目代码见Github