深圳建设交易中心网站,wordpress 文章通用模板下载,织梦模板大全,网站后缀有什么区别文章目录前言一、Knife4j是什么#xff1f;二、使用步骤1.导入依赖2.编写配置文件3.编写controller和实体类4.测试总结前言
接上篇整合Swagger链接奉上http://t.csdn.cn/9mXSu 一、Knife4j是什么#xff1f; 官方文档#xff1a;https://doc.xiaominfo.com/ 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.导入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion3.0.3/version/dependency2.编写配置文件
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 docketnew Docket(DocumentationType.SWAGGER_2).apiInfo(new ApiInfoBuilder()//描述字段支持Markdown语法.description(# Knife4j RESTful APIs测试).termsOfServiceUrl(https:www.baidu.com/).contact(new Contact(Sincere,Sincere.com,Sincereqq.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(ListT mappings) {ListT copy mappings.stream().filter(mapping - mapping.getPatternParser() null).collect(Collectors.toList());mappings.clear();mappings.addAll(copy);}SuppressWarnings(unchecked)private ListRequestMappingInfoHandlerMapping getHandlerMappings(Object bean) {try {Field field ReflectionUtils.findField(bean.getClass(), handlerMappings);field.setAccessible(true);return (ListRequestMappingInfoHandlerMapping) 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 ListUser getAll(User user){ListUser 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差不多没太大区别只不过界面可能更友好一些