springboot + vue前后端分离后台管理系统(三) -- 集成Knife4j

前言

对于开发人员来说,在开发过程中得自测是不可避免得,像postman这种工具就对模拟http请求提供了便捷。还有就是接口文档也是令人头疼得事情,Swagger就很好得解决了这种事情。

什么是Swagger?

Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset. Find out how Swagger can help you design and document your APIs at scale.
借助Swagger开源和专业工具集,为用户,团队和企业简化API开发。了解Swagger如何帮助您大规模设计和记录API。

Swagger选用

因为Swagger官方的API文档界面不好看,所以就找到了swagger-bootstrap-ui,界面好看还可以自定义请求参数文档。 后来又找到了该团队开发的springboot版本,在原有的基础上增强,Get it !
官网文档地址:https://doc.xiaominfo.com/knife4j/

image.png

引入

<dependency>
     <groupId>com.github.xiaoymin</groupId>
     <artifactId>knife4j-spring-boot-starter</artifactId>
     <version>2.0.8</version>
 </dependency>

3.x版本引用的是springfox3和OpenAPI3规范,目前是不稳定版本,所以选择引用2.x的版本~~~~

配置

新建SwaggerConfig.java

@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {

    @Bean(value = &quot;api&quot;)
    public Docket defaultApi2() {
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .description(&quot;# 文档的描述&quot;)
                        .version(&quot;1.0&quot;)
                        .build())
                //分组名称
                .groupName(&quot;1.X版本&quot;)
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage(&quot;com.ify.sampleAdmin.web.controller&quot;))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }
}

使用

接口添加swagger注解

@RestController
@RequestMapping(&quot;/user&quot;)
@Api(tags = &quot;用户模块&quot;)
public class UserController extends BaseController {


    @GetMapping(&quot;/user&quot;)
    @ApiOperation(value = &quot;获取根据ID获取用户&quot;)
    @ApiImplicitParam(name = &quot;id&quot;,value = &quot;用户id&quot;,required = true)
    public ResResult getUser(@RequestParam(value = &quot;id&quot;) String id) {
        return ResResult.success();
    }
}

运行http://localhost:8181/sa/doc.html
image.png

image.png

  • @Api(tags = ""):接口分组
  • @ApiOperation(value = ""):接口名称
  • @ApiImplicitParam(name = "id",value = "用户id",required = true):接口参数声明

@ApiImplicitParam注解用在GET请求上是好用的,但是如果POST接口参数是对象时,会把不必要的参数都显示出来,例如

@PostMapping(&quot;/user&quot;)
@ApiOperation(value = &quot;获取根据ID获取用户&quot;)
@ApiImplicitParam(name = &quot;id&quot;,value = &quot;用户id&quot;,required = true)
public ResResult getUser(User user) {
    return ResResult.success();
}

这是个POST接口,声明了只有一个id参数时必须传递的,参数是用User实体接收。结构swagger文档全部显示出来

image.png

当然Knife4j提供了过滤和包含参数的注解,可以排除或包含必须参数来简洁文档。

@ApiOperationSupport(ignoreParameters = {&quot;id&quot;,&quot;orderDate.id&quot;})
@ApiOperationSupport(order = 40,includeParameters = {&quot;ignoreLabels&quot;,&quot;longUser.ids&quot;})

但是,大多数人在开发接口的时候使用的传递参数都是Map或者JSONObject这类参数,Knife4j就提供了动态请求参数添加文档注释
例如:

@PostMapping(&quot;/user&quot;)
@ApiOperation(value = &quot;post用户&quot;)
@DynamicParameters(properties = {
        @DynamicParameter(name = &quot;id&quot;,value = &quot;ID&quot;,example = &quot;X000111&quot;,required = true,dataTypeClass = String.class),
        @DynamicParameter(name = &quot;username&quot;,value = &quot;用户名&quot;,required = true),
        @DynamicParameter(name = &quot;password&quot;,value = &quot;密码&quot;,required = true),
        @DynamicParameter(name = &quot;sex&quot;,value = &quot;性别&quot;,required = false),
})
public ResResult getUser(@RequestBody JSONObject params) {
    return ResResult.success();
}

image.png

swagger显示了必要的参数,并可以标明哪些参数是必传的! 真是个不错的功能。

总结

Knife4j是对swagger-bootstrap-ui的升级,而swagger-bootstrap-ui是只是对官方界面的美化。Knife4j版本则包含了给官方swagger的功能并加以增强,个人认为很好用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值