Swagger實(shí)現(xiàn)動(dòng)態(tài)條件注入與全局?jǐn)r截功能詳細(xì)流程
背景
Swagger 可以提供 API 操作的測(cè)試文檔,本文記錄 Swagger 使用過程中遇到的兩個(gè)小問題:
- 全局響應(yīng)結(jié)果進(jìn)行包裝后導(dǎo)致 Swagger 請(qǐng)求響應(yīng)結(jié)果無法解析,如果項(xiàng)目中配置了
ResponseBodyAdvice實(shí)現(xiàn)類,重寫了beforeBodyWrite方法對(duì)響應(yīng)結(jié)果進(jìn)行統(tǒng)一時(shí),應(yīng)該排除 Swagger2 的兩個(gè) URLv2/api-docs和swagger-resources。 - Swagger 注入條件區(qū)分測(cè)試和生產(chǎn)環(huán)境的配置的 ETL 不同語法對(duì)默認(rèn)無配置的處理結(jié)果。
Swagger2 使用流程
Swagger 用法很簡(jiǎn)單,加入引用,一個(gè)配置就可以為應(yīng)用提供接口測(cè)試界面。
第一步,引入依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.8.5</version>
</dependency>
第二步,添加 Swagger 配置類。
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
@ConditionalOnExpression("'${swagger.enable}'.equalsIgnoreCase('true')")
public class Swagger2Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("XXX 文檔")
.version("1.0")
.build();
}
}
第三步,為 Web 請(qǐng)求設(shè)置 Api 配置。
@GetMapping("/set")
@ApiOperation(value = "設(shè)置 Session")
public Object Index(HttpServletRequest request){
request.getSession().setAttribute("userUid", "111111");
return request.getSession().getAttribute("userUid");
}
條件配置分析
@ConditionalOnExpression("'${swagger.enable}'.equalsIgnoreCase('true')")這種方式,表達(dá)式成立的條件有兩項(xiàng) swagger.enable 必須配置,且值為 true 時(shí),才會(huì)成立。
另外一種寫法:
@ConditionalOnExpression("${swagger.enable:true}")如果未配置屬性 swagger.enable,那么根據(jù) ConditionalOnExpression 注解的默認(rèn)值是 true ,所以就會(huì)執(zhí)行注解配置。
啟示錄
為了方便開發(fā)測(cè)試,默認(rèn)無配置時(shí)視為滿足條件,生產(chǎn)環(huán)境下配置值為 false 是可以的。
到此這篇關(guān)于Swagger實(shí)現(xiàn)動(dòng)態(tài)條件注入與全局?jǐn)r截功能詳細(xì)流程的文章就介紹到這了,更多相關(guān)Swagger動(dòng)態(tài)條件注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解spring boot應(yīng)用啟動(dòng)原理分析
這篇文章主要介紹了詳解spring boot應(yīng)用啟動(dòng)原理分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
如何在springboot中引入?yún)?shù)校驗(yàn)
一般我們判斷前端傳過來的參數(shù),需要對(duì)某些值進(jìn)行判斷,是否滿足條件,而springboot相關(guān)的參數(shù)校驗(yàn)注解,可以解決我們這個(gè)問題,本文給大家介紹如何在springboot中引入?yún)?shù)校驗(yàn),感興趣的朋友一起看看吧2023-12-12
Java設(shè)計(jì)模式之橋接模式詳解(Bridge Pattern)
橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在將抽象部分與其實(shí)現(xiàn)部分分離,從而使兩者可以獨(dú)立地變化,橋接模式通過組合關(guān)系代替繼承關(guān)系,將抽象和實(shí)現(xiàn)解耦,使代碼更具擴(kuò)展性和維護(hù)性2025-02-02
RabbitMQ簡(jiǎn)單隊(duì)列實(shí)例及原理解析
這篇文章主要介紹了RabbitMQ簡(jiǎn)單隊(duì)列實(shí)例及原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
springboot 設(shè)置server.port不生效的原因及解決
這篇文章主要介紹了springboot 設(shè)置server.port不生效的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
java使用ZipInputStream實(shí)現(xiàn)讀取和寫入zip文件
zip文檔可以以壓縮格式存儲(chǔ)一個(gè)或多個(gè)文件,本文主要為大家詳細(xì)介紹了java如何使用ZipInputStream讀取Zip文檔與寫入,需要的小伙伴可以參考下2023-11-11

