使用@ApiModel遇到的問題及解決
@ApiModel遇到的問題
使用 swagger2 中的 @ApiModel 注解不規(guī)范遇到的 swagger 文檔 錯亂問題:
1. 習(xí)慣
以前使用 swagger2 時, 在出入?yún)嶓w上添加注解 @ApiModel 時習(xí)慣性的添加 value = "XXX" 屬性, 舊版本中一直沒有發(fā)現(xiàn)有什么問題.
2. 遇坑
最近在使用 swagger2:2.9.2 版本時, 遇到一個問題, swagger 文檔中的 入?yún)?結(jié)構(gòu)示例中的入?yún)?shù)跟代碼的入?yún)ο笾械淖侄尾黄ヅ洳灰恢? 導(dǎo)致接口聯(lián)調(diào)問題多
3. 排查
經(jīng)過排查發(fā)現(xiàn)是因為 @ApiModel 直接使用不規(guī)范導(dǎo)致的。
- 錯誤用法:@ApiModel(value = "用戶信息")
- 正確用法:@ApiModel(description = "用戶信息")
經(jīng)過排查發(fā)現(xiàn), swagger2 是需要 value 屬性在同一個服務(wù)全局中保持唯一的, swagger 會把所有的 API 中的出入?yún)嶓w列在 swagger 文檔的最下方, 如果存在多個實體的 @ApiModel(value = "用戶信息") 注解相同, 那么 swagger 只會識別一個, 其他的 實體 會被覆蓋, 不會被顯示, 其他被覆蓋的 實體在 API 被引用的地方在文檔中會被識別的相同名稱的實體 替代, 導(dǎo)致文檔展示錯亂問題
4. 解決
使用正確的用法:
@ApiModel(description = "用戶信息"), 如果我們能在代碼規(guī)范中保證實體名稱不會重復(fù), value 使用默認(rèn)就好, 所以不再配置, 實體說明使用 description 來進(jìn)行配置.
@ApiModel和@ApiModelProperty
版本
- springfox-swagger2 (version = 2.9.2)
- swagger-bootstrap-ui (version = 1.9.6)
- swagger-models (version =1.6.1)
@ApiModel
- 使用場景:在實體類上邊使用,標(biāo)記類時swagger的解析類
屬性名稱 | 數(shù)據(jù)類型 | 默認(rèn)值 | 說明 |
---|---|---|---|
value | String | 類名 | 為模型提供備用名稱 |
description | String | " | 提供詳細(xì)的類描述 |
parent | Class<?> | Void.class | 為模型提供父類以允許描述繼承關(guān)系 |
discriminator | String | " | 支持模型繼承和多態(tài),使用鑒別器的字段的名稱,可以斷言需要使用哪個子類型 |
subTypes | Class<?>[] | {} | 從此模型繼承的子類型數(shù)組 |
reference | String | ‘’ | 指定對應(yīng)類型定義和引用,覆蓋指定的任何其它元數(shù)據(jù) |
@ApiModelProperty
- 使用場景:使用在被 @ApiModel 注解的模型類的屬性上
屬性名稱 | 數(shù)據(jù)類型 | 默認(rèn)值 | 說明 |
---|---|---|---|
value | String | " | 屬性簡要說明 |
name | String | " | 運行覆蓋屬性的名稱,重寫屬性名稱 |
allowableValues | String | " | 限制參數(shù)可接受的值 |
access | String | " | 過濾屬性 |
notes | String | " | 尚未使用 |
dataType | String | " | 參數(shù)的數(shù)據(jù)類型 |
required | boolean | false | 是否必傳 |
position | int | 0 | 允許在模型中排序?qū)傩?/td> |
hidden | boolean | false | 隱藏模型屬性 |
example | String | " | 屬性的示例值 |
readOnly | boolean | false | 指定模型屬性為只讀,false:非只讀 |
reference | String | " | 指定對應(yīng)類型定義的引用,覆蓋指定的任何其他元數(shù)據(jù) |
allowEmptyValue | boolean | false | 允許傳空置,false:不允許傳空值 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀
這篇文章主要為大家介紹了AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12基于Java實現(xiàn)的Base64加密、解密原理代碼
這篇文章主要介紹了基于Java實現(xiàn)的Base64加密、解密原理代碼,需要的朋友可以參考下2014-07-07Myeclipse部署Tomcat_動力節(jié)點Java學(xué)院整理
這篇文章給大家介紹了Myeclipse部署Tomcat的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧2017-07-07Java?C++題解leetcode消失的兩個數(shù)字實例
這篇文章主要介紹了Java?C++題解leetcode消失的兩個數(shù)字實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Java實現(xiàn)的兩種常見簡單查找算法示例【快速查找與二分查找】
這篇文章主要介紹了Java實現(xiàn)的兩種常見簡單查找算法,結(jié)合具體實例形式分析了java快速查找與二分查找的原理與簡單實現(xiàn)技巧,需要的朋友可以參考下2017-09-09SpringCloud學(xué)習(xí)筆記之SpringCloud搭建父工程的過程圖解
SpringCloud是分布式微服務(wù)架構(gòu)的一站式解決方案,十多種微服務(wù)架構(gòu)落地技術(shù)的集合體,俗稱微服務(wù)全家桶,這篇文章主要介紹了SpringCloud學(xué)習(xí)筆記(一)搭建父工程,需要的朋友可以參考下2021-10-10淺談Java編程之if-else的優(yōu)化技巧總結(jié)
說實話,其實我很討厭在代碼里大量使用if-else,一是因為該類代碼執(zhí)行方式屬于面向過程的,二嘛,則是會顯得代碼過于冗余.這篇筆記,主要記錄一些自己在工作實踐當(dāng)中針對if-else的優(yōu)化心得,將會不定期地長期更新,需要的朋友可以參考下2021-06-06