欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC如何在生產(chǎn)環(huán)境禁用Swagger的方法

 更新時(shí)間:2018年02月23日 13:56:38   作者:若魚1919  
本篇文章主要介紹了SpringMVC如何在生產(chǎn)環(huán)境禁用Swagger的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)??傮w目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來更新。文件的方法,參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來始終保持同步。

Swagger 讓部署管理和使用功能強(qiáng)大的API從未如此簡單。好吧,以上是官方的說法,我直接復(fù)制的,在我看來swagger就是一個(gè)接口文檔管理器,以前我們寫接口一般都是world編寫,但是有一個(gè)問題就是測(cè)試的時(shí)候需要依賴第三方工具,GET的接口還好,直接瀏覽器打開,POST的只能依賴另外的工具了,而Swagger呢,可以直接通過代碼中的注解生成接口文檔(JavaEE),一般人都用這種方式,而且直接集成在項(xiàng)目中,方便成員查看,同時(shí)還能直接測(cè)試,另外Swagger的界面也不錯(cuò),也許這就是我選擇用Swagger的原因吧,直接官方說的RESTful 風(fēng)格那個(gè)不用管,不是RESTful 風(fēng)格的接口也能用,當(dāng)然Swagger還有一種方式就是手動(dòng)寫接口說明了,這樣的好處就是代碼只有代碼,因?yàn)橐坏┐a中添加了Swagger的接口注解后,代碼量還是增加了不少,當(dāng)然壞處就是你改完了代碼,還要去改接口文檔

SpringMVC集成springfox-swagger2和springfox-swagger-ui很簡單,只需要兩步:

(1)pom中添加依賴

<dependency> 
   <groupId>io.springfox</groupId> 
   <artifactId>springfox-swagger-ui</artifactId> 
   <version>${springfox-swagger.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>io.springfox</groupId> 
   <artifactId>springfox-swagger2</artifactId> 
   <version>${springfox-swagger.version}</version> 
  </dependency> 

(2)添加Swagger的配置類:

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

然后就可以通過http://localhost/swagger-ui.html看到項(xiàng)目中所有的接口信息了,通過http://localhost/v2/api-docs就能看到j(luò)son數(shù)據(jù)。

但是,如何在生產(chǎn)環(huán)境禁用這些api文檔呢?試了很多種方式,最終找到一個(gè)簡單實(shí)用的辦法:

@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())//如果是線上環(huán)境,添加路徑過濾,設(shè)置為全部都不符合 
  .build(); 
  }else { 
   return new Docket(DocumentationType.SWAGGER_2) 
   .apiInfo(apiInfo()); 
  } 
 } 
 
 private ApiInfo apiInfo() { 
  return new ApiInfoBuilder() 
    .title("XXX系統(tǒng)") 
    .description("XXX系統(tǒng)接口") 
    .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(); 
 } 
} 

現(xiàn)在http://localhost/swagger-ui.html這個(gè)頁面雖然還能訪問,那是卻看不到任何內(nèi)容了,包括http://localhost/v2/api-docs也是一樣。

應(yīng)該還有更好的辦法!

參考:http://www.dbjr.com.cn/article/135312.htm

swagger必須要跟springmvc在同一個(gè)context才行,springmvc只是spring的一個(gè)子context。如果swagger讓spring的context加載,那么swagger的那些url用springmvc的攔截器是攔截不到的!

所以,兩種解決辦法:

如果是使用注解的方式:

(1)spring-mvc的配置:

<!-- 使用Annotation自動(dòng)注冊(cè)Bean,只掃描@Controller --> 
<context:component-scan base-package="com.inspur.eyun.yunbx" use-default-filters="false"><!-- base-package 如果多個(gè),用“,”分隔 --> 
 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
 <context:include-filter type="assignable" expression="com.inspur.eyun.yunbx.swagger.SwaggerConfig"/> 
</context:component-scan> 

注意要把swagger的配置加進(jìn)來,同時(shí):

(2)spring的配置:

<!-- 包掃描、注解相關(guān) --> 
<context:component-scan base-package="com.inspur.eyun.yunbx"> 
 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
 <context:exclude-filter type="assignable" expression="com.inspur.eyun.yunbx.swagger.SwaggerConfig"/> 
</context:component-scan> 

注意把swagger排除掉

(3)Swagger的配置:

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

注意@Configuration注解。

當(dāng)然更推薦的辦法是使用xml配置的方式,因?yàn)檫@樣可以不用引入swagger的依賴包:

(1)spring-mvc的配置:

<!-- 使用Annotation自動(dòng)注冊(cè)Bean,只掃描@Controller --> 
 <context:component-scan base-package="com.inspur.eyun.yunbx" use-default-filters="false"><!-- base-package 如果多個(gè),用“,”分隔 --> 
  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
 </context:component-scan> 
<import resource="classpath:spring-mvc-swagger.xml" /> 

spring-mvc-swagger.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation=" 
  http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans.xsd"> 
 <description>SpringMVC Swagger Configuration</description> 
 <!-- swagger配置,生產(chǎn)環(huán)境置空 --> 
 <bean class="com.inspur.eyun.yunbx.swagger.SwaggerConfig" /> 
</beans> 

注意:我們這里把swagger單獨(dú)放到一個(gè)配置文件中,如果是線上環(huán)境,則文件內(nèi)容為空,如果是線下測(cè)試環(huán)境,則配置上Swagger。

(2)spring的配置:

<!-- 包掃描、注解相關(guān) --> 
 <context:component-scan base-package="com.inspur.eyun.yunbx"> 
  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
 </context:component-scan> 

(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平臺(tái)") 
    .description("XXX平臺(tái)接口") 
    .license("") 
    .licenseUrl("") 
    .termsOfServiceUrl("") 
    .version("1.0.0") 
    .contact(new Contact("","", "")) 
    .build(); 
 } 
} 

注意:這里我們?nèi)サ袅薂Configuration,同時(shí),修改我們的pom,配置多profile打包:

pom.xml:

<!-- Swagger --> 
  <dependency> 
   <groupId>io.springfox</groupId> 
   <artifactId>springfox-swagger2</artifactId> 
   <version>${springfox-swagger.version}</version> 
   <scope>${swagger.scope}</scope> 
  </dependency> 
  <dependency> 
   <groupId>io.springfox</groupId> 
   <artifactId>springfox-swagger-ui</artifactId> 
   <scope>${swagger.scope}</scope> 
   <version>${springfox-swagger-ui.version}</version> 
  </dependency> 

注意:這里的依賴的scope是動(dòng)態(tài)設(shè)置的,如果是線上環(huán)境,我們把scope設(shè)置成provided就可以。

<profiles> 
  <profile> 
   <id>dev</id> 
   <properties> 
    <profiles.active>dev</profiles.active> 
    <swagger.scope>compile</swagger.scope> 
   </properties> 
   <activation> 
    <activeByDefault>true</activeByDefault> 
   </activation> 
  </profile> 
  <profile> 
   <id>test</id> 
   <properties> 
    <profiles.active>test</profiles.active> 
    <swagger.scope>compile</swagger.scope> 
   </properties> 
  </profile> 
  <profile> 
   <id>online</id> 
   <properties> 
    <profiles.active>online</profiles.active> 
    <swagger.scope>provided</swagger.scope> 
   </properties> 
  </profile> 
 </profiles> 

通過不同的profile給swagger的依賴設(shè)置不同的scope!

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解析Java設(shè)計(jì)模式編程中命令模式的使用

    解析Java設(shè)計(jì)模式編程中命令模式的使用

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中命令模式的使用,在一些處理請(qǐng)求響應(yīng)的場(chǎng)合經(jīng)??梢杂玫矫钅J降木幊趟悸?需要的朋友可以參考下
    2016-02-02
  • Java中的getClass()以及getName()方法使用

    Java中的getClass()以及getName()方法使用

    這篇文章主要介紹了Java中的getClass()以及getName()方法使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • pageHelper一對(duì)多分頁解決方案示例

    pageHelper一對(duì)多分頁解決方案示例

    這篇文章主要為大家介紹了pageHelper一對(duì)多分頁解決方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Java局部變量線程安全原理分析

    Java局部變量線程安全原理分析

    這篇文章主要介紹了Java局部變量線程安全原理分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot整合OpenApi的實(shí)踐

    SpringBoot整合OpenApi的實(shí)踐

    本文主要介紹了SpringBoot整合OpenApi,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • IDEA 工程里 new不出來Vue文件的圖文解決方案

    IDEA 工程里 new不出來Vue文件的圖文解決方案

    這篇文章主要介紹了IDEA 工程里 new不出來Vue文件的解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • java軟引用在瀏覽器使用實(shí)例講解

    java軟引用在瀏覽器使用實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java軟引用在瀏覽器使用實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • Java如何實(shí)現(xiàn)Unicode和中文相互轉(zhuǎn)換

    Java如何實(shí)現(xiàn)Unicode和中文相互轉(zhuǎn)換

    這篇文章主要介紹了Java如何實(shí)現(xiàn)Unicode和中文相互轉(zhuǎn)換問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Springboot中yml對(duì)于list列表配置方式詳解

    Springboot中yml對(duì)于list列表配置方式詳解

    這篇文章主要介紹了Springboot中yml對(duì)于list列表配置方式詳解,使用@ConfigurationProperties讀取yml配置文件過程中會(huì)遇到讀取yml文件中列表,Config里面使用List集合接收,方法比較簡單,需要的朋友可以參考下
    2023-11-11
  • JAVA泛型的繼承和實(shí)現(xiàn)、擦除原理解析

    JAVA泛型的繼承和實(shí)現(xiàn)、擦除原理解析

    這篇文章主要介紹了JAVA泛型的繼承和實(shí)現(xiàn)、擦除原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論