SpringBoot整合Knife4j
文章目录
- 前言
- 一、Knife4j是什么?
- 二、使用步骤
- 1.导入依赖
- 2.编写配置文件
- 3.编写controller和实体类
- 4.测试
- 总结
前言
接上篇整合Swagger链接奉上http://t.csdn.cn/9mXSu
一、Knife4j是什么?
官方文档:https://doc.xiaominfo.com/
knife4j可以理解swagger的升级版,采用的是后端Java代码和Ui都混合在一个Jar包里面的方式提供给开发者使用,Knife4j不仅仅将前身的Ui皮肤通过Vue技术栈进行了重写,也增加了更多个性化的特性增强功能,基于springfox项目以及OpenAPI的规范,目前主要支持以Java开发为主,并且是依赖于大环境下使用的Spring MVC、Spring Boot、Spring Cloud框架.
二、使用步骤
1.导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>
2.编写配置文件
application.yml
spring:mvc:pathmatch:# 配置策略matching-strategy: ant-path-matcher
我们需要在config包下创建Knife4jConfig.java文件
package com.lzl.config;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ReflectionUtils;
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/7 15:56*/
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {@Bean(value = "dockerBean")public Docket dockerBean() {//指定使用Swagger2规范Docket docket=new Docket(DocumentationType.SWAGGER_2).apiInfo(new ApiInfoBuilder()//描述字段支持Markdown语法.description("# Knife4j RESTful APIs测试").termsOfServiceUrl("https:www.baidu.com/").contact(new Contact("Sincere","Sincere.com","Sincere@qq.com")).version("1.0").build())//分组名称.groupName("用户服务").select()//这里指定Controller扫描包路径.apis(RequestHandlerSelectors.basePackage("com.lzl")).paths(PathSelectors.any()).build();return docket;}@Beanpublic BeanPostProcessor generateBeanPostProcessor(){return new BeanPostProcessor() {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof WebMvcRequestHandlerProvider) {customizeSpringfoxHandlerMappings(getHandlerMappings(bean));}return bean;}private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {List<T> copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null).collect(Collectors.toList());mappings.clear();mappings.addAll(copy);}@SuppressWarnings("unchecked")private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {try {Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");field.setAccessible(true);return (List<RequestMappingInfoHandlerMapping>) field.get(bean);} catch (IllegalArgumentException | IllegalAccessException e) {throw new IllegalStateException(e);}}};}
}
3.编写controller和实体类
package com.lzl.pojo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/7 15:04*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("用户对象")
public class User {@ApiModelProperty("用户唯一标识")private Integer userId;@ApiModelProperty("用户名")private String userName;@ApiModelProperty("家庭住址")private String address;
}
这里做一个模拟数据库查询数据的动作
package com.lzl.controller;import com.lzl.pojo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/7 15:08*/@RestController
@RequestMapping("/user")
@Api(tags = "用户接口")
public class UserController {@GetMapping("/getAll")@ApiOperation("条件查询+分页获取用户信息")public List<User> getAll(User user){List<User> users = new ArrayList<>();users.add(new User(1,"大飞","草庙村"));users.add(new User(2,"大黄","山洞"));users.add(new User(3,"任老板","卧龙山"));return users;}@DeleteMapping("/deleteInfo")@ApiOperation("根据ID删除用户")public String deleteInfo(Integer id){return "删除成功!";}
}
4.测试
启动项目,访问http://localhost:8080/doc.html
成功!
我们可以查看所有的接口的详细信息,并调试
总结
Knife4j本质上和Swagger差不多,没太大区别,只不过界面可能更友好一些