热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

SpringMVC如何在生产环境禁用Swagger的方法

本篇文章主要介绍了SpringMVC如何在生产环境禁用Swagger的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

Swagger 让部署管理和使用功能强大的API从未如此简单。好吧,以上是官方的说法,我直接复制的,在我看来swagger就是一个接口文档管理器,以前我们写接口一般都是world编写,但是有一个问题就是测试的时候需要依赖第三方工具,GET的接口还好,直接浏览器打开,POST的只能依赖另外的工具了,而Swagger呢,可以直接通过代码中的注解生成接口文档(JavaEE),一般人都用这种方式,而且直接集成在项目中,方便成员查看,同时还能直接测试,另外Swagger的界面也不错,也许这就是我选择用Swagger的原因吧,直接官方说的RESTful 风格那个不用管,不是RESTful 风格的接口也能用,当然Swagger还有一种方式就是手动写接口说明了,这样的好处就是代码只有代码,因为一旦代码中添加了Swagger的接口注解后,代码量还是增加了不少,当然坏处就是你改完了代码,还要去改接口文档

SpringMVC集成springfox-swagger2和springfox-swagger-ui很简单,只需要两步:

(1)pom中添加依赖

 
   io.springfox 
   springfox-swagger-ui 
   ${springfox-swagger.version} 
   
   
   io.springfox 
   springfox-swagger2 
   ${springfox-swagger.version} 
   

(2)添加Swagger的配置类:

@Configuration 
@EnableSwagger2 
@EnableWebMvc 
@ComponentScan("com.XXX.controller") 
public class SwaggerConfig{ 
} 

然后就可以通过http://localhost/swagger-ui.html看到项目中所有的接口信息了,通过http://localhost/v2/api-docs就能看到json数据。

但是,如何在生产环境禁用这些api文档呢?试了很多种方式,最终找到一个简单实用的办法:

@Configuration 
@EnableSwagger2 
@EnableWebMvc 
@ComponentScan("com.XXX.controller") 
public class SwaggerConfig{  
 @Autowired 
 ConfigService configService; 
  
 @Bean 
 public Docket customDocket() { 
  if(configService.getServerEnv() == ServerEnvEnum.ONLINE) { 
   return new Docket(DocumentationType.SWAGGER_2) 
   .apiInfo(apiInfoOnline()) 
  .select() 
    .paths(PathSelectors.none())//如果是线上环境,添加路径过滤,设置为全部都不符合 
  .build(); 
  }else { 
   return new Docket(DocumentationType.SWAGGER_2) 
   .apiInfo(apiInfo()); 
  } 
 } 
 
 private ApiInfo apiInfo() { 
  return new ApiInfoBuilder() 
    .title("XXX系统") 
    .description("XXX系统接口") 
    .license("") 
    .licenseUrl("") 
    .termsOfServiceUrl("") 
    .version("1.0.0") 
    .contact(new Contact("","", "")) 
    .build(); 
 } 
 private ApiInfo apiInfoOnline() { 
  return new ApiInfoBuilder() 
    .title("") 
    .description("") 
    .license("") 
    .licenseUrl("") 
    .termsOfServiceUrl("") 
    .version("") 
    .contact(new Contact("","", "")) 
    .build(); 
 } 
} 

现在http://localhost/swagger-ui.html这个页面虽然还能访问,那是却看不到任何内容了,包括http://localhost/v2/api-docs也是一样。

应该还有更好的办法!

参考:https://www.jb51.net/article/135312.htm

swagger必须要跟springmvc在同一个context才行,springmvc只是spring的一个子context。如果swagger让spring的context加载,那么swagger的那些url用springmvc的拦截器是拦截不到的!

所以,两种解决办法:

如果是使用注解的方式:

(1)spring-mvc的配置:

 
 
  
  
 

注意要把swagger的配置加进来,同时:

(2)spring的配置:

 
 
  
  
 

注意把swagger排除掉

(3)Swagger的配置:

@Configuration 
@EnableSwagger2 
@EnableWebMvc 
@ComponentScan("com.inspur.eyun.yunbx.controller") 
public class SwaggerConfig{ 
} 

注意@Configuration注解。

当然更推荐的办法是使用xml配置的方式,因为这样可以不用引入swagger的依赖包:

(1)spring-mvc的配置:

 
  
   
  
 

spring-mvc-swagger.xml:

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
 SpringMVC Swagger Configuration 
  
  
 

注意:我们这里把swagger单独放到一个配置文件中,如果是线上环境,则文件内容为空,如果是线下测试环境,则配置上Swagger。

(2)spring的配置:

 
  
   
  

(3)Swagger的配置:

@EnableSwagger2 
@EnableWebMvc 
public class SwaggerConfig{ 
 
 @Bean 
 public Docket customDocket() { 
  return new Docket(DocumentationType.SWAGGER_2) 
    .apiInfo(apiInfo()) 
    .select() 
    .apis(RequestHandlerSelectors.basePackage("com.inspur.eyun.yunbx.controller")) 
    .paths(PathSelectors.any()) 
    .build(); 
 } 
 
 private ApiInfo apiInfo() { 
  return new ApiInfoBuilder() 
    .title("XXX平台") 
    .description("XXX平台接口") 
    .license("") 
    .licenseUrl("") 
    .termsOfServiceUrl("") 
    .version("1.0.0") 
    .contact(new Contact("","", "")) 
    .build(); 
 } 
} 

注意:这里我们去掉了@Configuration,同时,修改我们的pom,配置多profile打包:

pom.xml:

 
   
   io.springfox 
   springfox-swagger2 
   ${springfox-swagger.version} 
   ${swagger.scope} 
   
   
   io.springfox 
   springfox-swagger-ui 
   ${swagger.scope} 
   ${springfox-swagger-ui.version} 
   

注意:这里的依赖的scope是动态设置的,如果是线上环境,我们把scope设置成provided就可以。

 
   
   dev 
    
    dev 
    compile 
    
    
    true 
    
   
   
   test 
    
    test 
    compile 
    
   
   
   online 
    
    online 
    provided 
    
   
  

通过不同的profile给swagger的依赖设置不同的scope!

注意:springfox-swagger.version=2.7.0有bug,可以使用低版本2.6.1。太他妈的坑!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 在package.json中有如下两个对象:husky:{hooks:{pre-commit:lint-staged}},lint-staged:{src** ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
author-avatar
myj2017
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有