1 引入依赖

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

2 application.yml 配置 访问根路径

swagger2-path: /${spring.application.name}

3 Swagger2Config.java

/** Copyright 2021 Wicrenet, Inc. All rights reserved.*/
package com.hq.cloud.rfid.base.config;import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
import org.springframework.web.servlet.resource.PathResourceResolver;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
import org.springframework.web.util.UrlPathHelper;
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;import javax.servlet.ServletContext;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;/*** Swagger2 前端API配置** @author yangjunxiong* @date 2021/9/23 16:45**/
@Configuration
@EnableSwagger2
@AutoConfigureAfter({WebMvcConfg.class})
public class Swagger2Config {private final Environment environment;private final String      swagger2Path;public Swagger2Config(Environment environment, @Value("${swagger2-path}") String swagger2Path) {this.environment = environment;this.swagger2Path = swagger2Path;}@Beanpublic Docket createRestApi() {boolean swagger2Show = true;//生产关闭swagger2if (StringUtils.equals(environment.getActiveProfiles()[0], "prod")) {swagger2Show = false;}return new Docket(DocumentationType.SWAGGER_2).enable(swagger2Show).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.hq.cloud.rfid")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("xxx项目API接口管理").contact(new Contact("xxx", "", "")).version("1.0.0").build();}/*** SwaggerUI资源访问*/@Beanpublic SimpleUrlHandlerMapping swaggerUrlHandlerMapping(ServletContext servletContext,@Value("${swagger.mapping.order:10}") int order) throws Exception {SimpleUrlHandlerMapping urlHandlerMapping = new SimpleUrlHandlerMapping();Map<String, ResourceHttpRequestHandler> urlMap = new HashMap<>();{PathResourceResolver pathResourceResolver = new PathResourceResolver();pathResourceResolver.setAllowedLocations(new ClassPathResource("META-INF/resources/webjars/"));pathResourceResolver.setUrlPathHelper(new UrlPathHelper());ResourceHttpRequestHandler resourceHttpRequestHandler = new ResourceHttpRequestHandler();resourceHttpRequestHandler.setLocations(Collections.singletonList(new ClassPathResource("META-INF/resources/webjars/")));resourceHttpRequestHandler.setResourceResolvers(Collections.singletonList(pathResourceResolver));resourceHttpRequestHandler.setServletContext(servletContext);resourceHttpRequestHandler.afterPropertiesSet();urlMap.put(swagger2Path + "/webjars/**", resourceHttpRequestHandler);}{PathResourceResolver pathResourceResolver = new PathResourceResolver();pathResourceResolver.setAllowedLocations(new ClassPathResource("META-INF/resources/"));pathResourceResolver.setUrlPathHelper(new UrlPathHelper());ResourceHttpRequestHandler resourceHttpRequestHandler = new ResourceHttpRequestHandler();resourceHttpRequestHandler.setLocations(Collections.singletonList(new ClassPathResource("META-INF/resources/")));resourceHttpRequestHandler.setResourceResolvers(Collections.singletonList(pathResourceResolver));resourceHttpRequestHandler.setServletContext(servletContext);resourceHttpRequestHandler.afterPropertiesSet();urlMap.put(swagger2Path + "/**", resourceHttpRequestHandler);}urlHandlerMapping.setUrlMap(urlMap);urlHandlerMapping.setOrder(order);return urlHandlerMapping;}}

4 SwaggerResourceController.java

package com.hq.cloud.rfid.controller;import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.plugin.core.PluginRegistry;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import springfox.documentation.annotations.ApiIgnore;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.DocumentationCache;
import springfox.documentation.spring.web.json.Json;
import springfox.documentation.spring.web.json.JsonSerializer;
import springfox.documentation.swagger.web.ApiResourceController;
import springfox.documentation.swagger.web.SecurityConfiguration;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2Mapper;
import springfox.documentation.swagger2.web.Swagger2ControllerWebMvc;
import springfox.documentation.swagger2.web.WebMvcSwaggerTransformationFilter;import javax.servlet.http.HttpServletRequest;
import java.util.List;import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE;/*** SwaggerUI接口访问*/
@Controller
@ApiIgnore
@RequestMapping("{swagger2-path}")
public class SwaggerResourceController implements InitializingBean {public final         String                                                               swagger2Path;private final        ApiResourceController                                                apiResourceController;private final        DocumentationCache                                                   documentationCache;private final        ServiceModelToSwagger2Mapper                                         mapper;private final        JsonSerializer                                                       jsonSerializer;private final        PluginRegistry<WebMvcSwaggerTransformationFilter, DocumentationType> transformations;private static final String                                                               HAL_MEDIA_TYPE = "application/hal+json";private              Swagger2ControllerWebMvc                                             swagger2ControllerWebMvc;public SwaggerResourceController(@Value("${swagger2-path}") String swagger2Path, ApiResourceController apiResourceController, DocumentationCache documentationCache, ServiceModelToSwagger2Mapper mapper, JsonSerializer jsonSerializer, PluginRegistry<WebMvcSwaggerTransformationFilter, DocumentationType> transformations) {this.swagger2Path = swagger2Path;this.apiResourceController = apiResourceController;this.documentationCache = documentationCache;this.mapper = mapper;this.jsonSerializer = jsonSerializer;this.transformations = transformations;}@Overridepublic void afterPropertiesSet() {swagger2ControllerWebMvc = new Swagger2ControllerWebMvc(documentationCache, mapper, jsonSerializer, transformations);}/*** Swagger API首页地址* @return 首页地址*/@RequestMappingpublic ModelAndView index() {return new ModelAndView("redirect:" + swagger2Path + "/doc.html");}@RequestMapping("/swagger-resources/configuration/security")@ResponseBodypublic ResponseEntity<SecurityConfiguration> securityConfiguration() {return apiResourceController.securityConfiguration();}@RequestMapping("/swagger-resources/configuration/ui")@ResponseBodypublic ResponseEntity<UiConfiguration> uiConfiguration() {return apiResourceController.uiConfiguration();}@RequestMapping("/swagger-resources")@ResponseBodypublic ResponseEntity<List<SwaggerResource>> swaggerResources() {return apiResourceController.swaggerResources();}@RequestMapping(value = "/v2/api-docs", method = RequestMethod.GET, produces = {APPLICATION_JSON_VALUE, HAL_MEDIA_TYPE})@ResponseBodypublic ResponseEntity<Json> getDocumentation(@RequestParam(value = "group", required = false) String swaggerGroup,HttpServletRequest servletRequest) {return swagger2ControllerWebMvc.getDocumentation(swaggerGroup, servletRequest);}
}

访问路径 项目跟路径就是第2步 application.yml 配置

ip:端口号/项目根路径/doc.htm

knife4j 替代swagger2接口文档管理相关推荐

  1. 几款接口文档管理工具

    在项目开发测试中,接口文档是贯穿始终的.前后端开发需要在开发前期进行接口定义并形成文档,QA在功能测试和接口测试的环节也需要依赖于这些接口文档进行测试.接口文档往往以最简单的静态文档的形态存在.然而在 ...

  2. 盘点 8 款好用的 API 接口文档管理工具

    随着互联网的普及和发展,API 接口已经无处不在.它已经在 Web 应用程序.移动应用程序.云计算.物联网.人工智能等领域中得到广泛应用. 例如,在金融行业中,API 接口可以被用于构建支付服务.银行 ...

  3. 【工具】目前几种常见的线上接口文档管理平台的比较

    文章目录 一.前言 二.接口文档在线平台 1.apizza 1.1 文档导出html 1.2 导入Postman.json和Swagger.json文件 2. YApi 2.1 源码开源&免费 ...

  4. 一款强大的API接口文档管理工具(Smart-Doc + Torna)

    [本文由龙飞同学供稿] 在团队协作开发项目的时候,接口文档承担着向其他开发人员说明接口相关信息的重要任务,因此,一份清晰而又相近的接口文档至关重要. 但是,写接口文档的痛苦想必各位开发人员都体验过,明 ...

  5. 接口文档管理工具-Postman、Swagger、RAP、DOClever

    在项目开发测试中,接口文档是贯穿始终的.前后端开发需要在开发前期进行接口定义并形成文档,QA在功能测试和接口测试的环节也需要依赖于这些接口文档进行测试.接口文档往往以最简单的静态文档的形态存在.然而在 ...

  6. 接口文档管理工具-Postman、Swagger、RAP

    在项目开发测试中,接口文档是贯穿始终的.前后端开发需要在开发前期进行接口定义并形成文档,QA在功能测试和接口测试的环节也需要依赖于这些接口文档进行测试.接口文档往往以最简单的静态文档的形态存在.然而在 ...

  7. 如何维护接口文档供外部调用——在线接口文档管理

    上个章节初步将一个应用运行起来,由于服务不会单独存在,服务开发团队必然与其他服务团队进行服务调用,暴露出对外接口势在必行.早期做开发的时候,大家习惯于以 word 或 excel 的形式,但弊端显而易 ...

  8. 在线接口文档管理工具(小幺鸡)使用说明

    在线接口文档管理工具(小幺鸡)使用说明 前言 小幺鸡的地址:http://www.xiaoyaoji.cn/ 几大看点: 在线接口测试: 可视化编辑与分享: 代码开源.可以离线部署. 下面简单介绍下怎 ...

  9. swagger2接口文档

    文章目录 简介 Open API Swagger简介 Spring-fox 入门案例 第一步:导入依赖 第二步:编写controller类 第三步:编写启动类 第四步:运行启动类并访问ui页面 Swa ...

最新文章

  1. JavaSE_坚持读源码_ClassLoader对象_Java1.7
  2. linux ssh远程登录 配置文件 sshd_config 介绍
  3. 新版Edge浏览器弹出“ 禁用开发人员模式扩展 ”的解决方案
  4. Asp.net生成缩略图
  5. Laravel_post访问【419】问题解决方法
  6. html中的保存功能代码怎么写,java保存html代码怎么写
  7. mysql5.7安装差异_mysql5.7和mysql5.6同在CentOS7.4安装差异对比之5.7.18
  8. 我是如何白嫖 Github 服务器自动抓取每日必应壁纸的?
  9. python 列表推导式csv_Python 列表推导式
  10. 属于微型计算机主要性能指示,2014年兰大入学测试题--计算机基础
  11. JSOUP爬虫常见问题解决方法
  12. 苹果CoreFoundation源代码
  13. php投影,投影效果怎么做?PS制作逼真的投影效果
  14. Java LeetCode每日一题-从易到难带你领略算法的魅力(一):上升下降字符串
  15. AipOcr百度文字识别API Key和Secret Key申请及应用例子说明
  16. 通讯录版本1.0到3.0简易版
  17. 万豪酒店Marriott 积分兑换标准房晚必备:全球 Marriott Cat9 等级酒店列表 汇总
  18. dataV 自定义组件开发(个人信息展示 自动轮播)
  19. Linux下的C语言——第九节 指针
  20. 计算机组成原理简介-(一)概论

热门文章

  1. 销售数据分析怎么做?这篇文章说清楚了
  2. 商城网站设计八大原则
  3. linux ntp 定时同步_linux ntp时间同步
  4. 8、 OSI七层与TCP/IP五层网络架构详解
  5. Centos7 安装Redis详细教程
  6. word中鼠标点击文字下方出现蓝线,不点击就不出现
  7. 在华为云专属月,找到开启互联网第二增长曲线的一把钥匙
  8. 联想小新Pro14老是断网问题解决方法
  9. WIN10系统的电脑密码修改(能通过pin进入),完全不能进入时
  10. 多模态预训练中的Prompt(ALPRO,Frozen)