当前位置: 首页 > news >正文

农产品网站开发技术方案与设施河南建设监理协会

农产品网站开发技术方案与设施,河南建设监理协会,引擎搜索下载,做企业网站项目文章目录 前言一、简介二、版本参考三、基本使用1. 导入相关依赖2. 比对效果3. 增强特性应用 四、Spring-Cloud 整合1. 项目准备2. 实现步骤2.1 依赖引入2.2 编写配置类2.2.1基础信息配置2.2.2 配置接口信息2.2.3 安全认证配置 2.3 常用注解的使用2.3.1 Api2.3.2 ApiOperation2… 文章目录 前言一、简介二、版本参考三、基本使用1. 导入相关依赖2. 比对效果3. 增强特性应用 四、Spring-Cloud 整合1. 项目准备2. 实现步骤2.1 依赖引入2.2 编写配置类2.2.1基础信息配置2.2.2 配置接口信息2.2.3 安全认证配置 2.3 常用注解的使用2.3.1 Api2.3.2 ApiOperation2.3.3 ApiModel2.3.4 ApiModelProperty 2.4 网关整合2.5 项目下载 五、拓展1. 文件导入导出相关 六、可能会遇到的问题 前言 之前有写过 swagger 怎么使用的教程但是现在很多项目用的接口文档其实是 Knife4jKnife4j 它是对 swagger 在线接口文档的一个增强按照官网的话说就是给 swagger 做了一个更好看皮肤的同时加了一些新的功能本章内容我会向大家介绍在项目中如整合 knife4j 以及一些使用的细节。 上篇Swagger-的使用(详细教程) 如果你之前没有接使用过 swagger 的话建议先看下上篇博客。 一、简介 官方文档https://doc.xiaominfo.com/docs/quick-start 开源地址https://gitee.com/xiaoym/knife4j 关于 Knife4j 的介绍官方文档其实解释得很清楚了我就简单 copy 一下了。 Knife4j 的前身是 swagger-bootstrap-ui前身 swagger-bootstrap-ui 是一个纯 swagger-ui 的 ui 皮肤项目。 最开始只是一个增强版本的 swagger 的前端 ui但是随着项目的发展面对越来越多的个性化需求不得不编写后端 Java 代码以满足新的需求。最后项目更名为 Knife4j 是希望它能像一把匕首一样小巧轻量并且功能强悍更名也是希望把它做成一个为 Swagger 接口文档服务的通用性解决方案不仅仅只是专注于前端 ui 。 Knife4j 由国人程序员萧明于 2017 年开源距今为止 Star 数已经超过了 6.1k 了。 我们可以多关注下官方文档中的 增强特性 这里详细介绍了 Knife4j 的一些特性功能很多都是用得上的。 接口文档展示 Knife4j 采用了 Vue And Design Vue 组件进行重写页面大体长这样。 对比 swagger 生成的接口文档Knife4j 生成的接口文档就让人看起来更舒服一点。 并且支持导出离线文档 二、版本参考 knife4j 目前主要支持以 Java 开发为主并且支持 Spring MVC、Spring Boot、Spring Cloud 框架的集成使用。 Knife4j 的版本说明 版本说明1.9.6蓝色皮肤风格开始更名增加更多后端模块2.0~2.0.5Ui重写底层依赖的 springfox 框架版本是 2.9.22.0.6~2.0.9底层 springfox 框架版本升级知 2.10.5OpenAPI 规范是 v23.0~3.0.3底层依赖 springfox 框架版本升级至 3.0.3 OpenAPI 规范是v34.0~4.0 重要版本提供 OpenAPI2 和 OpenAPI3 两种规范供开发者自行选择主版本统一 Knife4j 的依赖引入要和 Spring-boot 版本相匹配所以得首先确保你项目中所使用的 Spring-boot 版本以下是一些常见的 Spring-boot 版本及其对应的 Knife4j 版本兼容推荐 Spring Boot版本Knife4j Swagger2规范Knife4j OpenAPI3规范1.5.x~2.0.0Knife4j 2.0.0Knife4j 4.0.02.0~2.2Knife4j 2.0.0 ~ 2.0.6Knife4j 4.0.02.2.x~2.4.0Knife4j 2.0.6 ~ 2.0.9Knife4j 4.0.02.4.0~2.7.xKnife4j 4.0.0Knife4j 4.0.0 3.0Knife4j 4.0.0Knife4j 4.0.0 如果你不考虑使用 Knife4 j提供的服务端增强功能引入 Knife4j 的 纯 Ui 版本 没有任何限制只需要考虑不同的规范即可。 规范说明 针对 Swagger2 规范和 OpenAPI3 规范的说明 在Spring Boot框架中Knife4j 对于服务端将 Spring 的开放接口解析成 Swagger2 或者 OpenAPI3 规范的框架也是依赖的第三方框架组件。说明如下 Swagger2 规范依赖 Springfox 项目该项目目前几乎处于停更状态但很多老项目依然使用的是该规范所以 Knife4j 在更新前端 Ui 的同时也继续保持了兼容OpenAPI3 规范依赖 Springdoc 项目更新发版频率非常快建议开发者尽快迁移过来使用 OpenAPI3 规范Knife4j后面的重心也会在这里。 ps不过 Knife4j 的 4.0.0 版本在 Maven 上我是没有看到也不知道为什么 T.T ~~。 三、基本使用 1. 导入相关依赖 上面说到了 Knife4j 的依赖引入要兼容 Spring-boot 的版本除此之外有些低版本的 Knife4j 还需要保留 swagger 的相关依赖并且 Knife4j 的版本要和 springfox 的版本相兼容但是有些高版本的 Knife4j 是不需要引入 swagger 相关的依赖的例如 3.0.3 版本。 比如说我的项目Swagger-的使用(详细教程) - 文章中搭建的 Spring-Boot 项目中 Spring-Boot 的版本是 2.1.4.RELEASE springfox 的版本是 2.9.2所以我要引入的 Knife4j 的版本应该在 2.0~2.0.5 之间并且还要保留 swagger 的相关依赖。 所以我引入了 2.0.5 版本的 Knife4j比如 !-- knife4j --!-- http://127.0.0.1:8080/doc.html --dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion2.0.5/version/dependency2. 比对效果 我在 Swagger-的使用(详细教程) 这篇博客中提供的项目中引入这个依赖Knife4j 的整合就基本完成了可以看下效果 swagger 接口文档默认地址http://localhost:8080/swagger-ui.html# Knife4j 接口文档默认地址http://127.0.0.1:8080/doc.html 原 swagger 接口文档 Knife4j 接口文档 3. 增强特性应用 关于 Knife4j 的增强特性我们可以参考官方文档来比如说这个访问页面加权控制 按照官方的文档就是在配置文件中添加 knife4j:# 开启增强配置 enable: true# 开启Swagger的Basic认证功能,默认是falsebasic:enable: true# Basic认证用户名username: test# Basic认证密码password: 123这样的配置就行了复制这个配置然后重启服务打开 Knife4j 效果如下 PS这些增强特性大多都是要 Knife4j 2.0.7 版本之后才能使用的如果要使用这些功能可能你还得升级 Knife4j 、springfox 甚至可能要升级 spring-boot 的版本比如我刚刚就升级了下这些框架的版本才起作用的。 四、Spring-Cloud 整合 1. 项目准备 之前是使用 Spring-boot 对 knife4j 进行整合现在的项目普遍是微服务化的而且在 Spring-cloud 整合 knife4j 的时候有些配置是需要注意的一不小心就会踩坑所以我重新搭建了一个 Spring-cloud-alibaba 的项目来整合 knife4j 作为示范仅供大家参考。 该项目只有一个网关、两个服务、和一个公共的模块甚至连数据库都不需要连接就很简单的 spring-cloud 项目并且写了个 说明文档帮助有需要的可以顺利的运行起来。 每个服务都写了四个接口用于接口测试 ------------------- 项目下载 ------------------- 链接百度网盘 提取码hk94 ----------------------------------------------- 2. 实现步骤 2.1 依赖引入 这里我就将 Knife4j 整合到 common-core 这个模块中作为示范。 因为我搭建的这个 Spring-Cloud 它的 Spring-Boot 的版本是 2.5.2所以我选择使用 Knife4j - 3.0.3 版本在 pom.xml (common-core) 中引入依赖 !-- knife4j --dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion3.0.3/version/dependency并且不需要引入 Swagger 相关的依赖。 这个时候 Knife4j 在线文档基本就整合进来了比如我将项目跑起来之后打开 system 服务的 Knife4j 文档 是这样的 访问 http://ip:port/doc.html 可以看到和 swagger 一样Knife4j 也有基本信息、接口信息和组这几类信息同时多了文档管理、接口统计等信息。 值得一提的是在这里有个 分组 Url /v3/api-docsKnife4j 接口文档中的接口信息数据都是来源于这个接口可以 http://ip:port/v3/api-docs 看到接口信息的 json 数据 2.2 编写配置类 虽然说引入 Knife4j 的依赖之后就能直接打开接口文档但是有些信息还是需要通过配置类去配置的比如基本信息、接口扫描规则等等。Knife4j 的配置大体和 swagger 一致因为它底层就是 swagger所以以下配置类的编写大致可以参考 Swagger-的使用(详细教程)。 在 config 目录下新建 SwaggerConfig 类 编写代码如下 Configuration EnableSwagger2 //开启 Swagger2 EnableKnife4j //开启 knife4j可以不写 EnableAutoConfiguration ConditionalOnProperty(name swagger.enable, matchIfMissing true) public class SwaggerConfig {}虽然编写了配置类但是这个配置类并不一定生效服务启动的时候还是会采用 Knife4j 默认的配置怎么才能让 Knife4j 采取你编写的配置类呢可以写一个注解指定容器加载你写的配置类添加在启动类上 注解代码如下 Target({ ElementType.TYPE }) Retention(RetentionPolicy.RUNTIME) Documented Inherited Import({ SwaggerConfig.class }) public interface EnableCustomSwagger { }2.2.1基础信息配置 和 swagger 一样通过 docket 来配置文档的基本信息基本信息设置在 ApiInfo 这个对象中。 ApiInfo 中默认的基本设置 titleApi DocumentationdescriptionApi Documentationversion1.0termsOfServiceUrlurn:toscontact无licenseApache 2.0licenseUrlhttp://www.apache.org/licenses/LICENSE-2.0 SwaggerConfig.java 配置文件添加以下内容 Beanpublic Docket docket() {// 创建一个 swagger 的 bean 实例return new Docket(DocumentationType.SWAGGER_2)// 配置基本信息.apiInfo(apiInfo());}/*** 基本信息设置*/private ApiInfo apiInfo() {return new ApiInfoBuilder()// 标题.title(多加辣-接口文档)// 描述.description(众里寻他千百度慕然回首那人却在灯火阑珊处)// 服务条款链接.termsOfServiceUrl(https://www.baidu.com)// 许可证.license(swagger-的使用(详细教程))// 许可证链接.licenseUrl(https://blog.csdn.net/xhmico/article/details/125353535)// 联系我.contact(new Contact(米大傻,https://blog.csdn.net/xhmico?typeblog,mico8080163.com))// 版本.version(1.0).build();}当然这些基本信息的数据你也可以放在配置文件中重启服务查看 可以看到基本信息已经是按照配置类配置所展示的。 2.2.2 配置接口信息 默认情况下Knife4j 是会展示所有的接口信息的包括最基础的 basic-error 相关的接口而我编写的接口仅仅只是 test-controller 相关的所以需要将那些与业务无关的接口过滤掉可这样配置 Beanpublic Docket docket() {// 创建一个 swagger 的 bean 实例return new Docket(DocumentationType.SWAGGER_2)// 配置基本信息.apiInfo(apiInfo())// 配置接口信息设置扫描接口.select()/** RequestHandlerSelectors* .any() // 扫描全部的接口默认* .none() // 全部不扫描* .basePackage(com.mike.server) // 扫描指定包下的接口最为常用* .withClassAnnotation(RestController.class) // 扫描带有指定注解的类下所有接口* .withMethodAnnotation(PostMapping.class) // 扫描带有只当注解的方法接口*/// 此包路径下的类才生成接口文档.apis(RequestHandlerSelectors.basePackage(com.mike.server))// 加了 RestController 注解的类才生成接口文档.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))// 加了 ApiOperation 注解的方法才生成接口文档//.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // ApiOperationswagger 常用注解用户标注方法描述/** PathSelectors* .any() // 满足条件的路径该断言总为true* .none() // 不满足条件的路径该断言总为false可用于生成环境屏蔽 swagger* .ant(/user/**) // 满足字符串表达式路径* .regex() // 符合正则的路径*/.paths(PathSelectors.any()).build();}因为这个配置比较灵活可以有很多种方法实现能达成目标即可重启项目测试 可以看到只剩下自己写的接口信息了。 2.2.3 安全认证配置 通常情况下我们的接口是需要添加 token、Authorization 这样的请求头这些请求头中起到安全认证的作用我们现在是没法通过接口文档调接口时添加请求头 添加以下配置 /*** 安全模式这里指定token通过Authorization头请求头传递*/private ListSecurityScheme securitySchemes() {ListSecurityScheme apiKeyList new ArrayListSecurityScheme();apiKeyList.add(new ApiKey(Authorization, Authorization, header));return apiKeyList;}/*** 安全上下文*/private ListSecurityContext securityContexts() {ListSecurityContext securityContexts new ArrayList();securityContexts.add(SecurityContext.builder().securityReferences(defaultAuth()).operationSelector(o - o.requestMappingPattern().matches(/.*)).build());return securityContexts;}/*** 默认的全局鉴权策略*/private ListSecurityReference defaultAuth() {AuthorizationScope authorizationScope new AuthorizationScope(global, accessEverything);AuthorizationScope[] authorizationScopes new AuthorizationScope[1];authorizationScopes[0] authorizationScope;ListSecurityReference securityReferences new ArrayList();securityReferences.add(new SecurityReference(Authorization, authorizationScopes));return securityReferences;}修改 docket() 方法 Beanpublic Docket docket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage(com.mike.server)).apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)).paths(PathSelectors.any()).build()// 安全模式.securitySchemes(securitySchemes())// 安全上下文.securityContexts(securityContexts()).pathMapping(/);}重启项目测试 现在就能为接口添加请求头了。 2.3 常用注解的使用 2.3.1 Api 该注解用在请求的类上表示对类的说明。 相关属性 tags说明该类的作用可以在前台界面上看到的注解value该参数无意义在UI界面上看不到不需要配置 用法 Api(tags 【测试-方法】) public class TestController {... }例如 名称由 test-controller 改为 测试-方法。 2.3.2 ApiOperation 该注解用来对某个方法/接口进行描述。 该注解的使用详情可参见博客 Swagger ApiOperation 注解详解 用法 GetMapping(/get/{id})ApiOperation(value get-测试方法)public ResultTestDto testGet(PathVariable(id) Long id) {...}例如 2.3.3 ApiModel 该注解是作用于类上面的是用来描述类的一些基本信息的。 相关属性 value提供类的一个备用名如果不设置默认情况下将使用 class 类的名称description对于类提供一个详细的描述信息parent这个属性用于描述的是类的一些父类信息discriminator这个属性解释起来比较麻烦因为这个类主要体现在断言当中subTypes可以通过这个属性指定我们想要使用的子类 用法 Data ApiModel(value TestDto, description 测试dto) public class TestDto {... }例如 2.3.4 ApiModelProperty 它的作用是添加和操作属性模块的数据。 该注解的使用详情可参见博客 ApiModelProperty注解的用法 用法 Data ApiModel(value TestDto, description 测试dto) public class TestDto {ApiModelProperty(value 名称)private String name;ApiModelProperty(value 值)private String value; }例如 2.4 网关整合 现在接口文档是能够打开了但是一个服务对于一个接口文档在 Spring-Cloud 中我们可以将每个服务的接口文档全部都整合到 Gateway 中也就是说我们只要从 Gateway 中打开接口文档就能很方便的切换查看各服务的接口文档例如 需要聚合各个服务的 swagger 接口代码如下 SwaggerProvider.java import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.config.GatewayProperties; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.support.NameUtils; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import org.springframework.web.reactive.config.ResourceHandlerRegistry; import org.springframework.web.reactive.config.WebFluxConfigurer; import springfox.documentation.swagger.web.SwaggerResource; import springfox.documentation.swagger.web.SwaggerResourcesProvider;import java.util.ArrayList; import java.util.List;/*** 聚合系统接口** author system*/ Component Slf4j Primary public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigurer {/*** Swagger2默认的url后缀*/public static final String SWAGGER2URL /v2/api-docs;/*** 网关路由*/Autowiredprivate RouteLocator routeLocator;Autowiredprivate GatewayProperties gatewayProperties;/*** 聚合其他服务接口** 注意* 在 Gateway 中聚合 swagger需要在每一个路由配置中添加 filters-StripPrefix 的配置这是为了在转发之前剔除路径的前缀* 比如* - id: mike_user* uri: lb://mike-server-user* predicates:* - Path/user/*** filters:* - StripPrefix1** StripPrefix1 就剔除了 /user** 其次是如果在 SwaggerConfig 中有配置 groupName则需要修改 SWAGGER2URL /v2/api-docs* 比如* 设置 .groupName(mike)* 则改为 SWAGGER2URL /v2/api-docs?groupmike*/Overridepublic ListSwaggerResource get() {ListSwaggerResource resourceList new ArrayList();ListString routes new ArrayList();// 获取网关中配置的 routerouteLocator.getRoutes().subscribe(route - routes.add(route.getId()));gatewayProperties.getRoutes().stream().filter(routeDefinition - routes.contains(routeDefinition.getId())).forEach(routeDefinition - routeDefinition.getPredicates().stream().filter(predicateDefinition - Path.equalsIgnoreCase(predicateDefinition.getName())).forEach(predicateDefinition - resourceList.add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX 0).replace(/**, SWAGGER2URL)))));return resourceList;}private SwaggerResource swaggerResource(String name, String location) {SwaggerResource swaggerResource new SwaggerResource();swaggerResource.setName(name);swaggerResource.setLocation(location);swaggerResource.setSwaggerVersion(2.0);return swaggerResource;}Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/* swagger-ui 地址 */registry.addResourceHandler(/swagger-ui/**).addResourceLocations(classpath:/META-INF/resources/webjars/springfox-swagger-ui/);} }SwaggerHandler.java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; import springfox.documentation.swagger.web.*;import java.util.Optional;RestController RequestMapping(/swagger-resources) public class SwaggerHandler {Autowired(required false)private SecurityConfiguration securityConfiguration;Autowired(required false)private UiConfiguration uiConfiguration;private final SwaggerResourcesProvider swaggerResources;Autowiredpublic SwaggerHandler(SwaggerResourcesProvider swaggerResources) {this.swaggerResources swaggerResources;}GetMapping(/configuration/security)public MonoResponseEntitySecurityConfiguration securityConfiguration() {return Mono.just(new ResponseEntity(Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()),HttpStatus.OK));}GetMapping(/configuration/ui)public MonoResponseEntityUiConfiguration uiConfiguration() {return Mono.just(new ResponseEntity(Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));}SuppressWarnings(rawtypes)GetMapping()public MonoResponseEntity swaggerResources() {return Mono.just((new ResponseEntity(swaggerResources.get(), HttpStatus.OK)));} }重启服务即可 PS如果你的网关中有一些安全认证上判断还得将文档相关的接口 /v2/api-docs 添加至白名单要不然接口文档可能会报错例如 #自定义配置 custom:whiteList:- /*/v2/api-docs2.5 项目下载 ------------------- 项目下载 ------------------- 链接百度网盘 提取码400m ----------------------------------------------- 五、拓展 1. 文件导入导出相关 有关上传文件相关的接口如果想要通过 Knife4j 选择文件 需要在方法上添加 ApiImplicitParam(name file, value 文件, dataTypeClass MultipartFile.class, required true) 这样一段代码即可例如 ApiOperation(value 示例导入-方式一)PostMapping(/importDate)ApiImplicitParam(name file, value 文件, dataTypeClass MultipartFile.class, required true)public ResponseBean importDate(RequestPart(file) MultipartFile file) {testService.importDate(file);return ResponseBean.success();}有关下载或者是导出文件相关的接口如果想要通过 Knife4j 下载文件 需要在相关的接口上将 ApiOperation 注解的 produces 属性设置为 application/octet-stream例如 GetMapping(/export)ApiOperation(value 示例导出-方式一, produces application/octet-stream)public ResponseBean export(RequestParam(value loginName, required false) ApiParam(value 登录名, required false) String loginName) {testService.export(loginName);return ResponseBean.success();}六、可能会遇到的问题 1. 因兼容性问题引起项目启动失败 简单来说就是版本冲突了可能是 Knife4j 和 swagger 的版本相冲突或者是和 spring-boot 的版本相冲突。 解决方法 根据 Knife4j 的官方文档引入相适配的依赖版本。 2. 配置增强特性不起作用 这些增强特性大多都是要 Knife4j 2.0.7 版本之后才能使用的如果要使用这些功能需要引入更高版本的 Knife4j 依赖同时这也可能会出现版本冲突。 3. Spring-Boot 2.6 和 springfox 不兼容问题 这个情况我其实没有遇到过要是你的项目 Spring-Boot 版本在 2.6.0 以上可以在 SwaggerConfig 类中添加以下这段代码看是否能解决你的问题 /*** 解决springboot2.6 和springfox不兼容问题*/BeanSuppressWarnings(all)public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {return new BeanPostProcessor() {Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {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);}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);}}};}4. 配置类不起作用 虽然编写了配置类但是这个配置类并不一定生效服务启动的时候还是会采用 Knife4j 默认的配置怎么才能让 Knife4j 采取你编写的配置类呢可以写一个注解指定容器加载你写的配置类添加在启动类上 注解代码如下 Target({ ElementType.TYPE }) Retention(RetentionPolicy.RUNTIME) Documented Inherited Import({ SwaggerConfig.class }) public interface EnableCustomSwagger { }然后重启服务。 5. 网关接口文档异常 这个出现的可能性比较多我就例举两个我遇到过的 首先是在网关配置文件中的路由配置中没有添加 filters-StripPrefix 的配置例如 - id: mike_useruri: lb://mike-server-userpredicates:- Path/user/**filters:- StripPrefix1或者是你在 SwaggerConfig.java 配置类中配置了 groupName倘如你配置的组名为 mike那么你应该在 SwaggerProvider.java 文件中将 SWAGGER2URL 的值改为/v2/api-docs?groupmike例如 Component Slf4j Primary public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigurer {/*** Swagger2默认的url后缀*/public static final String SWAGGER2URL /v2/api-docs?groupmike;... }上篇Swagger-的使用(详细教程) 参考博客 SpringBoot整合Knife4jhttps://blog.csdn.net/weixin_48418701/article/details/128415992 再见Swagger UI 国人开源了一款超好用的 API 文档生成框架真香https://zhuanlan.zhihu.com/p/438031681?utm_id0
http://wiki.neutronadmin.com/news/127939/

相关文章:

  • 广州网站建设网站建设网站建设催款函
  • 那里可以建网站四川省的建设厅注册中心网站
  • 家装企业网站系统下载杭州设计院
  • 学校网站的建设方案页面排版布局
  • 网站外部链接火车票网站开发
  • 网站设计像素vs加数据库做网站
  • 如何利用社交网站做招聘织梦商城网站
  • 网站建设论文开题报告范文把网站内的文本保存到txt怎么做
  • 怎么查看网站空间可以做 描文本链接的网站
  • 河津北京网站建设黄冈网站建设哪家好
  • 做网站电话销售说辞兼职做网站系统
  • 湛江海田网站建设招聘重庆网络安全公司
  • 国企网站的建设好用的网站开发软件
  • 营销单页网站企业网络营销推广方法
  • 网站建设 自查表做网站商城的目的是什么
  • flash源码网站宁晋网站建设设计
  • 建设外贸购物网站楼市最新消息2022新政
  • 网站建设 讲话乘风专业建站
  • 电子商务网站制作步骤别墅室内设计效果图
  • 网站开发的论文引言广东省网站备案
  • 建设部网站一级建造师报名网页设计实训总结50字
  • 济南网站建设 unzz新房网站建设公司
  • 腾讯wordpress 建站国家企业信用信息公示系统官网山东
  • nginx怎么做多个网站做网站设计用什么软件
  • 宣传类的网站怎么做网站建设策划文案
  • 网站建设的课程网站的优点和缺点
  • 潍坊网站建设做网站编辑好还是新媒体编辑
  • 建设一个自己的网站内蒙古省呼和浩特网站建设
  • 电子商务网站类型凌河锦州网站建设
  • 网站建设合同 保密条款智能家居产品设计案例