公司項目考慮使用swagger的注釋方式。簡單看了一下,使用swagger生成文檔要在方法上添加額外的注解來支援swagger文檔生成。大概是這個樣子
/**
* @author: qiaofan
* @date: 2019/6/4 18:07
* @version: 1.0
*/
@ApiOperation("")//一句話描述該方法
@ApiImplicitParams({
@ApiImplicitParam(name = "id",value = "填寫入參說明",required = false,dataType = "資料類型",paramType = "入參來源" ),
@ApiImplicitParam(name = "page",value = "填寫入參說明",required = false,dataType = "資料類型",paramType = "入參來源" ),
@ApiImplicitParam(name = "pagesize",value = "填寫入參說明",required = false,dataType = "資料類型",paramType = "入參來源" ),
@ApiImplicitParam(name = "id1",value = "填寫入參說明",required = false,dataType = "資料類型",paramType = "入參來源" ),
@ApiImplicitParam(name = "page1",value = "填寫入參說明",required = false,dataType = "資料類型",paramType = "入參來源" ),
@ApiImplicitParam(name = "pagesize1",value = "填寫入參說明",required = false,dataType = "資料類型",paramType = "入參來源" )
})
@GetMapping("/query/{id}/{page}/{pagesize}")
public ResultModel<User> test(@PathVariable int id,@PathVariable int page,@PathVariable int pagesize,
@PathVariable int id1,@PathVariable int page1,@PathVariable int pagesize1) {
System.out.println(id+","+page+","+pagesize);
User user = new User();
user.setId(3);
user.setNickName("小老弟");
return ResultModel.success("id查詢成功", user);
}
雖然swagger對代碼有侵入,但避免了接口修改後出現的文檔不一緻情況。并且swagger的注解也可以起到注釋的作用,并且還是國際規範。總體來說利大于弊。
總所周知,懶惰是第一生産力,寫了幾個swagger注釋之後發現模式大緻固定,是以.....
複制以下文本 --- 打開 idea Live Templet 粘貼 OK
<template name="*s" value="* * @author: $user$ * @date: $date$ $time$ * @version: 1.0 */ @ApiOperation("$var1$")//一句話描述該方法 $swaggerParam$" shortcut="ENTER" description="/**s回車,根據方法參數生成帶有swagger注解的注釋" toReformat="false" toShortenFQNames="true">
<variable name="user" expression="user()" defaultValue="" alwaysStopAt="false" />
<variable name="date" expression="date()" defaultValue="" alwaysStopAt="false" />
<variable name="time" expression="time()" defaultValue="" alwaysStopAt="false" />
<variable name="var1" expression="" defaultValue="123" alwaysStopAt="true" />
<variable name="swaggerParam" expression="" defaultValue="groovyScript(" def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); def paramStr =''; for(i = 0; i < params.size(); i++){ 	paramStr+='@ApiImplicitParam(name = \"' + params[i] + '\"\,value = \"填寫入參說明\"\,required = false\,dataType = \"資料類型\"\,paramType = \"入參來源\" )' + ((i < params.size() - 1) ? '\,\\n ' : '\\n') }; result +='' +((params.size()>1) ? '@ApiImplicitParams({\\n '+paramStr+'})': ''+paramStr+'')+''; return result; ",methodParameters());" alwaysStopAt="true" />
<context>
<option name="JAVA_CODE" value="true" />
</context>
</template>
/**s回車,根據方法參數生成帶有swagger注解的注釋
生成格式可以自定義修改swaggerParam的值,參見下文【手動配置、3】
手動 配置方式
1、打開 File –> Settings ->Live Templets,建立一個Templet Group ,命名為swagger。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31kMBpmT1UFRNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0IzN5IzNyATM1AjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、在建立的swagger group 下建立Live Templet,并如圖填寫。添加應用範圍 選java
注意:1、名稱 (*+‘自定義’)、說明任意
2、模闆以 * 開頭的,必須是以*開頭,不然在方法外是擷取不到參數清單的
*
* @author: $user$
* @date: $date$ $time$
* @version: 1.0
*/
@ApiOperation("$var1$")//一句話描述該方法
$swaggerParam$
3、給代碼段各項填值,點選右側 Edit variables ,填寫行數值
user,date,time這些在下拉選項裡選擇對應的資料就可以了
swaggerParam值是一段groovyScript代碼 :就是拼接字元串
groovyScript("
def result='@ApiOperation(\"接口描述\")\\n';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();
def paramStr ='';
for(i = 0; i < params.size(); i++){
paramStr+='@ApiImplicitParam(name = \"' + params[i] + '\"\,value = \"' + params[i] + '\"\,required = false\,dataType = \"資料類型\"\,paramType = \"參數來源\" )' + ((i < params.size() - 1) ? '\,\\n ' : '\\n')
};
result +='' +((params.size()>1) ? '@ApiImplicitParams({\\n '+paramStr+'})': ''+paramStr+'')+'';
return result;
",methodParameters());
idea->Live Templet 各函數作用可參閱https://www.cnblogs.com/meetrice/p/5596034.html
4、點選apply ,測試是否生效
Live Templet還有很多用法,這裡隻是介紹配合swagger注解使用
有什麼優化調整的建議,望各位大佬指出。
另外,想問一下有什麼方式可以擷取方法入參類型。可以一并加到swagger注釋中。