Swagger文檔接口參數類型query or body?

事出有因

所謂約定大于配置豹障,swaggger提供的接口描述注解可以實現接口的任意自定義的描述冯事,但是每個接口都那么寫,看起來就煩血公,按照項目的規(guī)范桅咆,幾乎所有接口約定的格式等都是一致的,只需要使用@ApiParam描述參數意義即可坞笙。
以上岩饼,發(fā)現有時參數的parmType會被解析為query荚虚,有時會解析為body,導致前端文檔顯示錯誤

取經之路

于是乎一個debugger就是跟
發(fā)現swagger使用了一堆plugin來解析參數籍茧,其中有一個叫springfox.documentation.spring.web.readers.parameter.ParameterTypeReader的插件版述,專門來解析parmType

解析參數parmType

參數無注解時
解析文件類型

代碼的意思我整理了一個表格

條件 對應parmType
@PathVariable注解 path
@RequestBody注解 body
@RequestPart注解 formData
@RequestHeader注解 header
@RequestParam注解 解析方式和無注解時一致
參數類型為MultipartFile或被Collection\Array等包裝的MultipartFile form
無任何注解consumes包含application/x-www-form-urlencoded且接口類型為post form
無任何注解consumes包含multipart/form-data且接口類型為post formData
無任何注解且不滿足上述2個條件 query
不符合上述任何條件 body

到這里發(fā)現問題,我的接口參數很多都只有@ApiParam這一個注解來描述參數意義寞冯,這樣就會都走到最后返回默認的body渴析,導致接口發(fā)生問題,而正確的類型應該是query吮龄,由上表看來俭茧,使paramType變?yōu)閝uery的方式有2種

  1. 不加任何注解、consumes不包含application/x-www-form-urlencodedmultipart/form-data
  2. 使用@RequestParam注解漓帚,consumes不包含application/x-www-form-urlencodedmultipart/form-data

consumes我就沒設置過母债,所以只能使用@RequestParam注解來使paramType變?yōu)?code>query,但是每個接口都要加,這么大(xiao)的工作量我能妥協嗎? 顯然不能!

正確的解決方案:

于是自定義CustomParameterTypeReader 修改默認的返回值為query尝抖,然后@Component毡们、@Order作為bean并將優(yōu)先級調至最低(@Order默認的就是最大值),因為swagger插件的順序是使用AnnotationAwareOrderComparator來排序的昧辽,這樣衙熔,在原有的ParameterTypeReader配置paramType之后,我們自定義的CustomParameterTypeReader將覆蓋paramType搅荞,實現最終目的

獲取到所有插件后使用AnnotationAwareOrderComparator進行排序
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末红氯,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子咕痛,更是在濱河造成了極大的恐慌痢甘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暇检,死亡現場離奇詭異产阱,居然都是意外死亡婉称,警方通過查閱死者的電腦和手機块仆,發(fā)現死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來王暗,“玉大人悔据,你說我怎么就攤上這事∷滓迹” “怎么了科汗?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绷雏。 經常有香客問我头滔,道長怖亭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任坤检,我火速辦了婚禮兴猩,結果婚禮上,老公的妹妹穿的比我還像新娘早歇。我一直安慰自己倾芝,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布箭跳。 她就那樣靜靜地躺著晨另,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谱姓。 梳的紋絲不亂的頭發(fā)上借尿,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音逝段,去河邊找鬼垛玻。 笑死,一個胖子當著我的面吹牛奶躯,可吹牛的內容都是我干的帚桩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼嘹黔,長吁一口氣:“原來是場噩夢啊……” “哼账嚎!你這毒婦竟也來了?” 一聲冷哼從身側響起儡蔓,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤郭蕉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喂江,有當地人在樹林里發(fā)現了一具尸體召锈,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年获询,在試婚紗的時候發(fā)現自己被綠了涨岁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡吉嚣,死狀恐怖梢薪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情尝哆,我是刑警寧澤秉撇,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響琐馆,放射性物質發(fā)生泄漏规阀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一瘦麸、第九天 我趴在偏房一處隱蔽的房頂上張望姥敛。 院中可真熱鬧,春花似錦瞎暑、人聲如沸彤敛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墨榄。三九已至,卻和暖如春勿她,著一層夾襖步出監(jiān)牢的瞬間袄秩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工逢并, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留之剧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓砍聊,卻偏偏與公主長得像背稼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子玻蝌,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348