Swagger自定义模板
2019獨角獸企業重金招聘Python工程師標準>>>
Swagger自定義模板
下載Swagger codegen
<dependency><groupId>io.swagger</groupId><artifactId>swagger-codegen-cli</artifactId><version>2.2.1</version> </dependency>或者訪問其github項目位置。
生成自定義模板項目
我們將用meta命令來生成自定義模板項目。可以先運行一下下面的命令,看看具體的參數。
java -jar swagger-codegen-cli.jar help meta簡單說明一下參數
-n <name>, --name <name> 自定義模板的名字,之后會用做swagger codegen支持的新語言名,在-l 命令中使用-o <output directory>, --output <output directory>輸出目錄,默認當前目錄-p <package>, --package <package>輸出包名,默認是 io.swagger.codegen生成項目概述
生成的是一個maven項目,可以用mvn package生成jar文件。 項目里面只有一個java文件,為了說明方便,叫它XGenerator,是一個繼承io.swagger.codegen.DefaultCodegen的生成器,里面的注釋需要好好閱讀以下。
簡單來說,swagger生成代碼的流程,是把用設計器生成的ymal或者json代碼,輸出到mustach模板中。那么由于json代碼內容比較多,它把內容大概分為2個部分,一個是model,一個是operation。
XGenerator 繼承而來的 modelTemplateFiles,是model模板,可以訪問model的數據; apiTemplateFiles就是api和controller的模板集合了,可以訪問operation的數據。 此外,還有supportingFiles,可以訪問所有數據。
模板可以使用的變量
也就是如何查看model和operation的內容? 運行生成命令時,加上-DdebugModels或者-DdebugOperations就可以,比如查看生成c#代碼時的model和operation數據
java -DdebugModels -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \-i http://petstore.swagger.io/v2/swagger.json \-l csharp \ java -DdebugOperations -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \-i http://petstore.swagger.io/v2/swagger.json \-l csharp \在調試項目時,輸出還是非常有用的。
修改代碼
由于我們需要改一下spring-mvc的模板,所以先要獲得原來的模板內容。這些內容都在swagger-codegen項目里面。
check swagger-codegen源碼
git clone https://github.com/swagger-api/swagger-codegen.git然后用目前最新的2.2.1版本。
git checkout v2.2.1打開swagger-codegen項目,我們感興趣的是spring-mvc相關的部分,找到io.swagger.codegen.languages.SpringCodegen。其他相關語言的生成,都在io.swagger.codegen.languages包下面。順便看看SpringCodegen的父類io.swagger.codegen.languages.AbstractJavaCodegen。
然后我們去找相關的模板文件,swagger-codegen\modules\swagger-codegen\src\main\resources\JavaSpring\ 目錄下面的mustach文件,都是相關的模板文件。
至于mustach模板的語法,請參見文檔。
復制相關模板
復制相關模板到自定義模板項目的resource目錄下面,進行你需要的更改。
修改XGenerator代碼
下面我們需要改XGenerator里面的內容。
在構造方法里面,找到
apiTemplateFiles.put這個地方,把需要的模板加入進去。
把io.swagger.codegen.languages.SpringCodegen#postProcessOperations這個方法復制到XGenerator里面。用io.swagger.codegen.languages.AbstractJavaCodegen#getTypeDeclaration的內容覆蓋XGenerator里面的同名方法。 這2個處理完全是因為默認傳過來的數據格式和java的集合模板符號不一致,所做的處理。詳細可以看其注釋,也可以用之前說的-DdebugModels或者-DdebugOperations查看原始數據。
調試
在pom.xml里面加入下面依賴項。
<dependency><groupId>io.swagger</groupId><artifactId>swagger-codegen-cli</artifactId><version>${swagger-codegen-version}</version><scope>provided</scope> </dependency>配置main class為io.swagger.codegen.SwaggerCodegen 參數和之前命令行一致,注意改-l 參數為自己的項目名(XGenerator#getName中返回的字符串)。
運行
修改和調試完畢之后,運行maven命令打包。
mvn package在target目錄下找到生成的jar包,假設名為x-swagger-codegen.jar。為了方便,將其復制到swagger-codegen-cli.jar 同一目錄。然后執行命令來運行。
java -cp x-swagger-codegen.jar;swagger-codegen-cli.jar io.swagger.codegen.SwaggerCodegen轉載于:https://my.oschina.net/u/2006445/blog/843915
總結
以上是生活随笔為你收集整理的Swagger自定义模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第二章 信息系统集成及服务管理
- 下一篇: 【入门-R爬虫抓取数据】文本挖掘之数据爬