【SpringBoot】22、SpringBoot中整合knife4j接口文档
在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护
接口文档使得项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发,项目维护中或者项目人员更迭,方便后期人员查看、维护
1、界面先赏
1.1、首页
1.2、接口文档
1.3、调试
2、整合 knife4j
2.1、引入 maven 依赖
<!-- knife4j接口文档 start -->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version>
</dependency>
2.2、knife4j 配置文件
创建 Knife4jConfig 文件
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;/*** knife4j 配置** @Author Lizhou*/
@Configuration
@EnableSwagger2
public class Knife4jConfig {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.zyxx")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("SpringBoot项目 后台服务API接口文档").description("使用 knife4j 搭建的后台服务API接口文档").termsOfServiceUrl("http://localhost:8080/").contact("lizhou").version("1.0.0").build();}
}
整体配置与 Swagger2 几乎一致,扫描 controller 所在的包
2.3、启动类
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.spring.web.SpringfoxWebMvcConfiguration;@SpringBootApplication
@ConditionalOnClass(SpringfoxWebMvcConfiguration.class)
public class SbmApplication implements WebMvcConfigurer {public static void main(String[] args) {SpringApplication.run(SbmApplication.class, args);}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}
}
我们需要开放其静态资源的访问,启动类实现 WebMvcConfigurer 接口,重写 addResourceHandlers 方法
2.4、访问文档
启动项目,访问路径
http://localhost:8080/doc.html
3、注意
访问时,如果提示 knife4j 文档异常,检查下自己的拦截器是否没有放开 knife4j 所需要的请求
需要在拦截器,放开请求
package com.zyxx.common.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.ArrayList;
import java.util.List;/*** 注册拦截器** @Author Lizhou**/
@Configuration
public class WebConfigurer implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginHandlerInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {InterceptorRegistration ir = registry.addInterceptor(loginHandlerInterceptor);// 拦截路径ir.addPathPatterns("/*");// 不拦截路径List<String> irs = new ArrayList<String>();irs.add("/login");irs.add("/api/*");// 开放knife4jirs.add("/doc.html");irs.add("/service-worker.js");irs.add("/swagger-resources");ir.excludePathPatterns(irs);}
}
4、使用
使用注解的方式与 swagger2 是一样的
4.1、controller
import com.zyxx.common.utils.ResponseResult;
import com.zyxx.sbm.service.MgtUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** <p>* 用户信息表 前端控制器* </p>** @author lizhou* @since 2020-06-30*/
@Api(tags = "后台管理端--用户模块")
@Controller
@RequestMapping("/mgt-user")
public class MgtUserController {@Autowiredprivate MgtUserService mgtUserService;@ApiOperation(value = "分页查询用户数据", notes = "分页查询用户数据")@ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页码数", required = true),@ApiImplicitParam(name = "limit", value = "每页条数", required = true)})@GetMapping("list")@ResponseBodypublic ResponseResult listUser(int page, int limit) {return mgtUserService.listUser(page, limit);}
}
@Api,整个类的注释
@ApiOperation,方法上的注释
@ApiImplicitParams,参数列表的注释
@ApiImplicitParam,每一个参数的注释
4.2、实体类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** <p>* 用户信息表* </p>** @author lizhou* @since 2020-06-30*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="mgt_user对象", description="用户信息对象")
public class MgtUser extends Model<MgtUser> {private static final long serialVersionUID = 1L;@TableId(value = "id", type = IdType.AUTO)@ApiModelProperty(value = "主键ID")private Long id;@ApiModelProperty(value = "姓名")private String name;@ApiModelProperty(value = "年龄")private Integer age;@ApiModelProperty(value = "技能")private String skill;@ApiModelProperty(value = "评价")private String evaluate;@ApiModelProperty(value = "分数")private Long fraction;@Overrideprotected Serializable pkVal() {return this.id;}
}
@ApiModel,实体类的注解
@ApiModelProperty,字段的注解
5、分组展示
我们针对多个包内的 API 接口,可以选择分组展示,配置如下:
package com.asurplus.common.knife4j;import com.asurplus.common.consts.SystemConst;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;/*** swagger2 配置** @Author Lizhou*/
@Configuration
@EnableSwagger2
public class Knife4jConfig {@Bean("appApi")public Docket appApi() {return new Docket(DocumentationType.SWAGGER_2)// 分组名称.groupName("APP端API文档").apiInfo(apiInfo()).select()// 扫描包位置,扫描所有带有此注解的方法.apis(RequestHandlerSelectors.basePackage("com.asurplus.api")).paths(PathSelectors.any()).build();}@Bean("adminApi")public Docket adminApi() {return new Docket(DocumentationType.SWAGGER_2)// 分组名称.groupName("管理端API文档").apiInfo(apiInfo()).select()// 扫描包位置,扫描所有带有此注解的方法.apis(RequestHandlerSelectors.basePackage("com.asurplus.system")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder()// 标题.title(SystemConst.SYSTEM_ITEM_NAME + "管理后台服务API接口文档")// 简介.description("使用 knife4j 搭建的后台服务API在线接口文档")// 服务条款url.termsOfServiceUrl("无")// 版本.version("1.0.0")// 作者.contact(new Contact("Administrators", "无", "无"))// 构建.build();}
}
6、开启认证功能
knife4j 新的版本中推出了生产环境保护与认证功能,只需要在配置文件中设置即可:
# swagger配置
knife4j:# 开启增强模式enable: true# 开启生产环境保护production: false# 开启认证功能basic:enable: trueusername: adminpassword: 123456
在生产环境中,我们需要开启生产环境保护,以防接口信息泄露,造成安全生产问题
以上就是,SpringBoot中整合 knife4j 接口文档的全部过程
如您在阅读中发现不足,欢迎留言!!!
【SpringBoot】22、SpringBoot中整合knife4j接口文档相关推荐
- SpringBoot集成knife4j接口文档
knife4j介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案. 其他的详情请看官方文档: knife4j官方文档 首先创建一个spring boot 项目, ...
- SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
保姆级教程,逻辑删除及字段自动填充设置,特别要说明的是本次用的是MySQL数据库,如果使用Oracle数据库是,数据库配置需要改变,数据库表一定要大写,否则无法生成代码. 数据库表 CREATE TA ...
- knife4j接口文档
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍 ...
- Spring Boot 1.5.10项目引入knife4j接口文档
介绍 knife4j是一个在线接口文档项目,对swaggger2进行增强,页面更加美观,功能更加强大 背景 在前后端分离的趋势下,团队一直没有接口文档规范,联调接口全凭一个个接口去代码里扒,后端同事忙 ...
- 整合Swagger接口文档
Swagger接口文档:自动生成接口文档 1.添加依赖: <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagg ...
- 访问swagger/Knife4j 接口文档报错:java.lang.NumberFormatException: For input string: ““
目录 问题描述 解决过程 问题描述 报异常如下:java.lang.NumberFormatException: For input string: "" 虽然不影响使用,但是每次 ...
- 接口文档swapper2和knife4j
官网:springboot集成knife4j swapper2 Swagger能够根据代码中的注解自动生成api文档,并且提供测试接口: 依赖 <!--swagger2的依赖-->< ...
- 开发中不可轻视的接口文档
接口文档是描述如何与软件系统中的特定接口进行交互的文档,通常包含接口的名称.描述.请求和响应的格式.参数.返回值.错误码.调用示例等信息.它是开发人员在设计和开发软件系统时必不可少的参考资料. 日常工 ...
- springboot整合knife4j,从此告别手写接口文档
关于knife4j Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目 一开始项目初衷是为了写一个增 ...
最新文章
- c语言程序设计上机考试占多少分,C语言程序设计上机考试题目汇编.doc
- 别总埋汰写代码,停下总结一下吧
- bluez 设置绑定pin码_国家工信部紧急提醒:一定要设置这个密码!
- Socket 进行发送
- php读取客户机本地时间,PHP如何获取客户端时区以及准确显示所在地时间
- IOS之AFNetworking,SDWebImage,Kingfisher,Alamofire,FMDB框架的使用
- P7276-送给好友的礼物【dp】
- 【转】Qtcreator中常用快捷键和小技巧
- DXP 内电层分割
- SRM 578 DIV 2
- IIS日志-网站运维的好帮手
- 最想学 Go、Python,全栈开发者紧缺!分析了 11 万条程序员数据后有了这些发现...
- 给 kibana 增加一个退出logout按钮
- php复合索引,多列复合索引的使用绕过微软sqlserver的一个缺陷
- js 关闭子页面刷新父页面
- HTML炫酷粒子源代码
- Matlab 之norm函数
- tracert、traceroute、mtr、WinMTR
- iOS开发初学者入门需要学习哪些知识?
- Eclipse 启动时提示loading workbench错误并提示查看.log