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. Docker 容器技术 — Overview
  2. HTTP状态码(HTTP Status Code),常见的error 404, error 504等的意思
  3. U-Boot 之一 零基础编译 U-Boot 过程详解 及 编译后的使用说明
  4. Wordpress插件
  5. Nokia7610彩信设置
  6. 洛谷P1169 树上分组背包
  7. 如何实现文件互拖-VMware Tools (ubuntu系统)安装详细过程与使用
  8. vbs if 不等于_6、if语句和关系表达式
  9. 台达b3伺服参数设置方法_2020东莞清溪台达自动化配件回收厂家直购
  10. JavaScript学习笔记(一)--JS基础【入门必看】
  11. linux用户态使用gpio中断方法
  12. Android 测试技能树
  13. proteus——采用 LM317 的稳压电源
  14. 基于Java的图书管理系统(附源码和课件)
  15. Freebase上的SPARQL查询
  16. 4.React Native项目开发如何配置调试
  17. python代码使用cython进行加密
  18. 柏林纪行(上):整体感受
  19. python小应用之moviepy的视频剪辑制作gif图
  20. 你知道什么是 a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站…z 站吗 ?...

热门文章

  1. filter2D图像卷积
  2. 林元图为什么不创造一部新的武功
  3. 多系统电脑切换系统操作步骤
  4. 【pyg】第一篇总结(基于karate的3层GCN+简单可视化,额外补充了cora)
  5. 【Spring】AOP面向切面编程(Spring4和Spring5区别)
  6. usb-modeswitch
  7. 小狗路飞——史上最有格调的宠物狗
  8. python生成正态分布矩阵_使用Numpy生成正态分布数据
  9. deepin linux 安装教程,如何安装Deepin Linux?Deepin Linux安装体验
  10. Word 中由EndNote生成的参考文献格式调整