①. knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!
③. http://ip:port/doc.html
①. 文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。
②. 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
③. 个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息
④. 离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件
⑤. 接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接
<properties>
<knife4j.version>2.0.9knife4j.version>
<lombok.version>1.18.12lombok.version>
properties>
<dependencies>
<dependency>
<groupId>com.github.xiaoymingroupId>
<artifactId>knife4j-spring-boot-starterartifactId>
<version>${knife4j.version}version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.80version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
dependencies>
@Configuration
@EnableSwagger2WebMvc
// @ConditionalOnExpression(value = "'develop'.equals('${spring.cloud.nacos.config.namespace}') or 'testing'.equals('${spring.cloud.nacos.config.namespace}')")
public class SwaggerConfig {
@Bean(value = "swaggerBean")
public Docket swaggerBean() {
//指定使用Swagger2规范
List<Parameter> pars = new ArrayList<>();
//暂无需token校验
//pars.add(new ParameterBuilder().name("token").description("认证token").modelRef(new ModelRef("string")).parameterType("header").build());
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.title("swagger测试查询")
//描述字段支持Markdown语法
.description("swagger测试查询系统")
.contact(new Contact("tangzhi", "", "845195485@qq.com"))
.version("1.0")
.build())
//分组名称
.groupName("ssm-test-inquire")
.select()
//这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.xiaozhi.swagger"))
.paths(PathSelectors.any())
.build().globalOperationParameters(pars);
}
}
属性 | 解释 |
---|---|
tags | 如果设置这个值、value的值会被覆盖 |
description | 对api资源的描述 |
value | url的路径值 |
basePath | 基本路径可以不配置 |
position | 如果配置多个Api想改变显示的顺序位置 |
produces | For example, “application/json, application/xml” |
consumes | For example, “application/json, application/xml” |
protocols | Possible values: http, https, ws, wss. |
authorizations | 高级特性认证时配置 |
hidden | 配置为true将在文档中隐藏 |
@Controller
@Slf4j
@RequestMapping("/xxx")
@Api(tags = "人员信息API", description = "提供人员信息相关的Rest API")
public class XxxController{
}
// 1. UserController
@Api(tags = "01.用户管理模块")
public class UserController {...}
// 2. WeiboController
@Api(tags = "02.微博管理模块")
public class WeiboController {...}
// 3. CommentController
@Api(tags = "03.评论管理模块")
public class CommentController {...}
属性 | 解释 |
---|---|
value | url的路径值 |
tags | 如果设置这个值、value的值会被覆盖 |
description | 对api资源的描述 |
basePath | 基本路径可以不配置 |
position | 如果配置多个Api 想改变显示的顺序位置 |
produces | For example, “application/json, application/xml” |
consumes | For example, “application/json, application/xml” |
protocols | Possible values: http, https, ws, wss. |
authorizations | 高级特性认证时配置 |
hidden | 配置为true将在文档中隐藏 |
response | 返回的对象 |
responseContainer | 这些对象是有效的 “List”, “Set” or “Map”.,其他无效 |
httpMethod | “GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH” |
/**注册功能*/
@RequestMapping("reg")
@ApiOperation(value = "注册功能")
public int reg(@RequestBody UserRegDTO userRegDTO){...}
①. 添加在POJO类的属性上的注解,用于对请求参数或响应结果中的某个属性进行说明,主要通过其value属性配置描述文本,并可通过example属性配置示例值
②. 参数说明
@Data
public class UserRegDTO {
@ApiModelProperty(value = "用户名", required = true, example = "赵丽颖")
private String username;
@ApiModelProperty(value = "密码", required = true)
private String password;
@ApiModelProperty(value = "昵称", required = true)
private String nickname;
}
①. 添加在控制器类中处理请求的方法上的注解,主要用于配置非封装(非XxxDTO/XxxParam的参数)的参数
②. 参数说明
@ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int")
public WeiboDetailVO selectById(int id){...}
①. 添加在控制器类中处理请求的方法上的注解,当方法有多个非封装的参数时,在方法上添加此注解,并在注解内部通过@ApiImplicitParam数组配置多个参数
②. 此处以微博详情功能为例
/**微博详情页功能*/
@GetMapping("selectById")
@ApiOperation(value = "微博详情功能")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int"),
@ApiImplicitParam(name = "username", value = "用户名", required=true)
})
// 额外增加username参数,仅仅用于测试
public WeiboDetailVO selectById(int id, String username){
return weiboMapper.selectById(id);
}