当前位置: 首页 > 后端技术 > Java

在JAVA中,让Swagger产生一个更符合我们诉求的描述文档,并根据需要决定显示或隐藏指定内容

时间:2023-04-01 22:19:52 Java

澶у濂斤紝鎴戜滑鍙堣闈簡銆傚湪涔嬪墠鐨勬枃妗c€奐AVA涓嚜瀹氫箟鎵╁睍Swagger鐨勮兘鍔涳紝鑷姩鐢熸垚鍙傛暟鍙栧€煎惈涔夎鏄庯紝鎻愬崌寮€鍙戞晥鐜囥€嬩腑锛屾垜浠璁轰簡濡備綍閫氳繃鑷畾涔夋敞瑙f潵鎵╁睍swagger鐨勮兘鍔涳紝浣垮緱Swagger鏀寔浠庢寚瀹氱殑鏋氫妇绫昏嚜鍔ㄧ敓鎴愭帴鍙f枃妗d腑鐨勫瓧娈垫弿杩扮殑瀹炵幇鎬濊矾銆傚叾瀹瀞wagger浣滀负涓€涓簲鐢ㄥ箍娉涚殑鍦ㄧ嚎鎺ュ彛鏂囨。杈呭姪宸ュ叿锛岃櫧鐒剁畝鍗曟槗鐢紝浣嗚鐢ㄥソ杩樻槸闇€瑕佷笅鍔熷か鐨勩€傞偅涔堬紝杩欑瘒鏂囨。灏卞拰澶у鑱婅亰濡備綍鐢ㄥソswagger锛岃瀹冪湡姝f垚涓烘垜浠」鐩氦浠樿繃绋嬩腑鐨勬硶瀹濄€傛洿鏀规帴鍙f枃妗g殑閫氱敤鏍囬鍜屾弿杩伴粯璁ゆ儏鍐典笅锛孲wagger鎺ュ彛鏁翠釜鏂囨。鐨勫悕绉板拰鎻忚堪閮芥槸閫氱敤鍊硷紝杩欐牱浼氳浜烘嬁鍒版枃妗e悗涓€澶撮浘姘达紝鍒嗕笉娓呮槸鍝釜椤圭洰锛屽摢涓郴缁熶互鍙婂摢涓湇鍔$粰瀹冩彁渚涗簡鎺ュ彛锛屼笉鐭ラ亾鏄摢涓洟闃熻礋璐f帴鍙o紝鍝釜寮€鍙戣€呯淮鎶ょ殑銆備緥濡傚涓嬶細涓轰簡浣撶幇鎺ュ彛鏂囨。鐨勪笓涓氭€э紝鏂逛究澶у浜嗚В鎺ュ彛鏂囨。鐨勭郴缁熴€佸搴旂増鏈€佺淮鎶ゅ洟闃熺瓑淇℃伅锛屾垜浠彲浠ユ牴鎹渶瑕佸湪浠g爜涓嚜瀹氫箟鐩稿叧鍐呭.渚嬪锛欯BeanpublicDocketcreateRestApi(){ApiInfoapiInfo=newApiInfoBuilder().title("璧勬簮绠$悊绯荤粺鎺ュ彛鏂囨。").description("APP/WEB璋冪敤璧勬簮绠$悊妯″潡鎺ュ彛鐨勮缁嗘枃妗h鏄?).version("v1.0.0").contact(newContact("鏋舵瀯鍚挋","https://juejin.cn/user/1028798616709294","veezean@outlook.com")).termsOfServiceUrl("https://juejin.cn/user/1028798616709294").license("ApacheLicense").licenseUrl("http://xxx").build();杩斿洖鏂扮殑Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select()銆俠uild();}閲嶅惎鏌ョ湅鐣岄潰锛屽彲浠ュ彂鐜扮晫闈笂鐨勭浉鍏冲唴瀹瑰凡缁忔敼鎴愪簡鎴戜滑鑷畾涔夌殑鍐呭锛屾槸涓嶆槸姣旀敼涔嬪墠鏇村姞娓呮櫚涓撲笟浜嗭紵涓婅堪swagger鏀寔鑷畾涔夋弿杩板瓧娈典俊鎭紝褰掔撼濡備笅锛氬瓧娈靛惈涔夋弿杩版爣棰樻帴鍙f枃妗f枃妗f爣棰樻弿杩版帴鍙f枃妗h缁嗘暣浣撴弿杩扮増鏈帴鍙f枃妗ermsOfServiceUrl瀵瑰簲鐨勭増鏈俊鎭鎺ュ彛鐨勬彁渚涘洟闃熷搴旂殑鍥㈤槦documenturl鍦板潃contact璐熻矗杩欓儴鍒嗘帴鍙g殑鑱旂郴淇℃伅锛屽寘鎷鍚嶃€侀偖绠便€佷富椤祏rl鍦板潃绛夈€俵icense鎸囧畾鎺ュ彛閬靛惊鐨刲icense鍗忚鐗堟湰銆俵icenseUrl璇ユ帴鍙i伒寰殑璁稿彲鍗忚鐨勮缁嗕粙缁嶃€傜晫闈㈠唴瀹瑰湪鎵嬪姩缂栧啓鐣岄潰鏂囨。鏃讹紝鎴戜滑鍙互鏍规嵁瀹為檯鎯呭喌鐏垫椿鎺у埗闇€瑕佸啓鍏ユ枃妗g殑鐣岄潰鍐呭鍜岀晫闈㈠唴瀹广€傜鍙g殑request-responsebody涓殑瀛楁淇℃伅鈥斺€斿洜涓哄苟涓嶆槸绯荤粺涓彁渚涚殑鎵€鏈夋帴鍙i兘闇€瑕佸湪鎺ュ彛鏂囨。涓綋鐜板嚭鏉ユ毚闇茬粰璋冪敤鏂圭煡閬擄紝姣斿鏈変竴浜涚郴缁熺姸鎬佺洃鎺ф帴鍙e彧闇€瑕佸唴閮ㄤ娇鐢ㄤ篃灏辨槸璇达紝瀵逛簬Swagger鏉ヨ锛屽湪鐢熸垚鎺ュ彛鏂囨。鏃讹紝榛樿鏄壂鎻忔墍鏈堾Controllers涓殑鎵€鏈夋帴鍙f柟娉曪紝骞舵樉绀哄湪鏂囨。涓紝浣嗕篃鑰冭檻浜嗘寜闇€闅愯棌鎴栨樉绀烘帴鍙e湪瀹為檯搴旂敤涓€傚唴瀹瑰惛寮曚汉骞舵彁渚涘绉嶄笉鍚岀殑鏂瑰紡鏉ユ敮鎸佸畠銆備笅闈㈡垜浠竴璧锋潵鐪嬬湅鍚с€備负鍗曚釜鎺ュ彛闅愯棌鍦ㄥ崟涓帴鍙f柟娉曚笂闈㈡坊鍔燖ApiOperation娉ㄨВ锛屾寚瀹歨idden=true瀵箂wagger鎺ュ彛闅愯棌鎺ュ彛锛欯GetMapping("/test")@ApiOperation(value="internaltestInterface",hidden=true)publicStringtest(){return"OK";}鍚姩娴佺▼锛屾煡鐪婼wagger鎺ュ彛锛屽彂鐜版帴鍙d笂娌℃湁鍑虹幇鎺ュ彛锛氬鏋滄暣涓狢ontroller涓嬬殑鎵€鏈夋帴鍙i兘闅愯棌鎺ュ彛鍦ㄦ暣涓狢ontroller绫讳腑class閮介渶瑕侀殣钘忥紝鍙互鍦–onntroller绫讳腑鍔犱笂@ApiIgnore娉ㄨВ銆侤RestController@RequestMapping("/test")@ApiIgnorepublicclassTestController{//...ignore...}淇敼鍚庨噸鍚繘绋嬶紝鐒跺悗鎵撳紑swagger鐣岄潰锛屽彂鐜版暣涓猅estController绫荤殑鐣岄潰涓嶆樉绀恒€傝繖閲岃ˉ鍏呬竴涓嬶紝鍥犱负鐢ㄦ潵鎻忚堪Controller绫绘帴鍙e惈涔夌殑娉ㄨВ@Api涔熸湁涓€涓猦idden灞炴€э紝鐪嬬湅瀹冪殑婧愮爜娉ㄨВ锛屽鏋滆缃甴idden=true锛屽簲璇ヤ篃浼氭妸Controller绫婚殣钘忎负涓€涓墍鏈夌殑銆備絾瀹為檯涓婏紝娴嬭瘯鍙戠幇骞舵病鏈夌敓鏁堛€備娇鐢ㄨ繖涓灏忓績锛堝熀浜巗wagger2.7.0鐗堟湰娴嬭瘯锛屼笉纭畾鏄笉鏄疊UG锛夈€侤Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Inheritedpublic@interfaceApi{/***闅愯棌璇ヨ祫婧愪笅鐨勬搷浣溿€?*@returntrueiftheapishouldbehiddenfromtheswaggerdocumentation*/booleanhidden()defaultfalse;}鍙樉绀烘寚瀹氬寘璺緞涓嬬殑鎺ュ彛銆傛垜浠殑椤圭洰涓粡甯镐細渚濊禆鎴栬€呭紩鐢ㄤ竴浜涚涓夋柟鐨刯ar鍖咃紝鏈夋椂鍊欒繖浜涚涓夋柟鐨刯ar鍖呬篃浼氭彁渚涗竴浜涙帴鍙o紝杩欎簺鎺ュ彛涔熶細鍑虹幇鍦ㄦ垜浠殑鎺ュ彛鏂囨。涓€傝繖鏍蜂竴鏉ワ紝灏变細鏄惧緱鎺ュ彛鏂囨。涓湁寰堝涓嶇‘瀹氱殑鍐呭銆備緥濡傦細鍥犱负涓氬姟浠g爜涓病鏈夋彁渚涜繖閮ㄥ垎閫昏緫锛屾墍浠ユ垜浠棤娉曢€氳繃淇敼婧愮爜锛岄€氳繃涓婅堪鏂瑰紡娣诲姞hidden=true鏉ユ帶鍒跺叾涓嶆樉绀恒€傝繖鏃跺€欏氨闇€瑕佸叿澶囨牴鎹寘杩涜鐧藉悕鍗曟帶鍒剁殑鑳藉姏銆係wagger涔熸敮鎸佸熀浜庣粰瀹氱殑basePackage鍜岃矾寰勭殑缁勫悎鎺у埗锛屽彧鏄剧ず缁欏畾鍖呬笅鎸囧畾璺緞涓嬬殑鎺ュ彛銆侤BeanpublicDocketcreateRestApi(){ApiInfoapiInfo=newApiInfoBuilder().title("璧勬簮绠$悊绯荤粺鎺ュ彛鏂囨。").description("APP/WEB璋冪敤璧勬簮绠$悊妯″潡鎺ュ彛鐨勮缁嗘枃妗h鏄?).version("v1.0.0").build();ApiSelectorBuilderselectorBuilder=(newDocket(DocumentationType.SWAGGER_2)).apiInfo(apiInfo).select();selectorBuilder.apis(RequestHandlerSelectors.basePackage("com.jiagouwudao.resmanage"));selectorBuilder.paths(PathSelectors.any());returnselectorBuilder.build();}杩欐牱鍙互淇濊瘉鎺ュ彛鏂囨。涓嚭鐜扮殑鎵€鏈夋帴鍙i兘鏄垜浠嚜宸卞畾涔夌殑鎺ュ彛銆傞噸鍚苟鍒锋柊鐣岄潰锛屼綘浼氬彂鐜皊wagger鐣岄潰涓婂彧鏄剧ず浜嗘寚瀹氬寘鐩綍涓嬬殑Controller鐣岄潰銆傞殣钘忓搷搴斾腑涓嶆効鏆撮湶鐨勫睘鎬у湪椤圭洰寮€鍙戣繃绋嬩腑锛屽鏋滄垜浠殑浠g爜娌℃湁寮哄埗鎬х殑VO鍜孌O鍒嗗尯锛屼负浜嗗噺灏戠紪鐮侀噺锛屾垜浠彲鑳戒細浣跨敤鍚屼竴涓璞¤繘琛屽唴閮ㄥ鐞嗗拰澶栭儴浜や簰.渚嬪锛氬畾涔変竴涓狾perateLog瀵硅薄锛屽畠鏄暟鎹簱涓璗_OPERATE_LOG琛ㄥ搴旂殑瀹炰綋绫伙紝鐢ㄤ簬璁板綍姣忎釜鐢ㄦ埛鐨勬搷浣滆涓猴紱鍚屾椂浣滀负recordOperateLog鎺ュ彛鐨勮姹備綋锛屼紶閫掗渶瑕佽褰曠殑鐢ㄦ埛鎿嶄綔淇℃伅銆備笂渚嬩腑锛氫綔涓烘暟鎹〃瀹炰綋绫昏繘琛岄€昏緫澶勭悊鏃讹紝闇€瑕佷娇鐢ㄥ敮涓€涓婚敭id淇℃伅浣滀负recordOperateLog鎺ュ彛鐨勮姹備綋鏃讹紝璋冪敤鑰呬笉闇€瑕佹寚瀹氳繖鏉¤褰曠殑id鍊硷紙ID鍊间細鍦―B涓瓨鍌ㄦ椂锛孌B浼氳嚜鍔ㄧ敓鎴愪竴涓敮涓€鐨勮嚜澧炰富閿級鍦ㄨ繖绉嶅満鏅笅锛屾垜浠笇鏈涘湪鎻愪緵鐨勬帴鍙f枃妗d腑锛宨d瀛楁涓嶅簲璇ヤ綋鐜板湪瀛楁鎻忚堪涓璻ecordOperateLog鎺ュ彛鐨剅equestbody锛岄伩鍏嶈皟鐢ㄨ€呮贩娣嗭紝涓嶇煡閬撹皟鐢ㄦ椂id搴旇濡備綍鍒嗛厤銆傛垜浠彲浠ラ€氳繃鍦ㄦ寚瀹氬瓧娈典笂娣诲姞@ApiModelProperty娉ㄨВ骞舵寚瀹歨idden=true灏嗗叾闅愯棌鍦ㄦ帴鍙f枃妗d腑銆備緥濡傦細@Data@ApiModel("鎿嶄綔璁板綍淇℃伅")publicclassOperateLog{@ApiModelProperty(value="璁板綍鍞竴ID锛屾棤鎰忎箟",hidden=true)privatelongid;@ApiModelProperty("鎿嶄綔绫诲瀷锛屽彇鍊艰鏄庯細1銆佹坊鍔狅紱2銆佹洿鏂帮紱3銆佸垹闄わ紱4銆佹煡璇?)privateintoperateType;@ApiModelProperty("鎿嶄綔鐢ㄦ埛")绉佹湁瀛楃涓茬敤鎴凤紱@ApiModelProperty(value="OperationDetails")privateStringdetail;}閭d箞鎺ュ彛涓殑鎺ュ彛鏂囨。鏄笉浼氭樉绀篿d鐨勭浉鍏充俊鎭殑锛堟敞鎰忥細鍙槸鎺ュ彛鏂囨。涓嶅弽鏄狅紝涓嶄細褰卞搷瀹為檯鍊硷級鐗瑰畾璇锋眰鎴栧搷搴斾腑鐨勬瀛楁锛夈€傚叧闂敓浜х幆澧冪殑swagger鑰冭檻鍒扮敓浜х幆澧冪殑瀹夊叏鎬э紝瀵逛簬涓€浜涙瘮杈冮噸瑕佺殑绯荤粺锛屾垜浠竴鑸兘涓嶆効鎰忔毚闇茬敓浜х幆澧冪殑鎺ュ彛鏂囦欢锛屼互鍏嶇粰绯荤粺鐨勮繍琛屽甫鏉ラ殣鎮c€傚湪SpringBoot椤圭洰涓紝鎴戜滑浼氶拡瀵逛笉鍚岀殑鐜鎻愪緵涓嶅悓鐨勯厤缃枃浠讹紝鐒跺悗閫氳繃--spring.active.profile鏉ユ寚瀹氬惎鍔ㄦ椂鍔犺浇鍝簺閰嶇疆銆傚鏋滄垜浠渶瑕佷娇Swagger鍙闂紝鎴戜滑鍙互閫氳繃鍦ㄤ唬鐮佷腑娣诲姞@EnableSwagger2娉ㄨВ鏉ュ疄鐜般€傚鏋滈檺鍒跺湪寮€鍙戞垨娴嬭瘯鐜鍙厑璁竤wagger璁块棶锛岀敓浜х幆澧冧笉鍏佽寮€鍚紝鍙渶瑕佽@EnableSwagger2娉ㄨВ鐨勭被鏍规嵁褰撳墠杩愯鐜鍐冲畾鏄惁鍔犺浇鍗冲彲銆傚€熷姪SpringBoot鎻愪緵鐨凘Profile娉ㄨВ锛屾垜浠彲浠ヨ繖鏍峰疄鐜帮細@Configuration@EnableSwagger2@Profile({"DEV","TEST"})publicclassSwaggerConfig{}杩欐牱锛孲waggerConfig绫诲氨鍙互涓嶅綋profile=PROD鏃朵細琚姞杞斤紝swagger鐨勫紑鍏充笉浼氭墦寮€銆備娇鐢?-spring.active.profile=PROD鍚姩杩涚▼锛屽皾璇曡闂畇wagger鐣岄潰锛屽彂鐜版墦涓嶅紑锛氫负Swagger鎹㈢毊鑲ゃ€傞粯璁ょ殑swagger鐣岄潰鏄剧ず鐨勬槸灞呬腑鍒楀嚭鐨勬墍鏈夊唴瀹癸紝鐒跺悗闇€瑕侀€愬眰灞曞紑銆備笂闈㈢殑鎿嶄綔骞朵笉澶柟渚匡紝鏁翠綋鐨勭晫闈㈤鏍间篃涓嶅お绗﹀悎涓€涓€滄枃妗b€濈殑澶栬銆備负浜嗘彁鍗囩敤鎴蜂綋楠岋紝鍙互浣跨敤寮€婧愮殑knife4j妗嗘灦璁﹕wagger鏇村ソ鐢ㄣ€備娇鐢ㄦ柟娉曢潪甯哥畝鍗曘€傚湪鐜版湁swagger渚濊禆鐨勫熀纭€涓婏紝鍦╬om.xml涓坊鍔犲涓嬪紩鐢ㄤ緷璧栵細com.github.xiaoyminknife4j-spring-ui2.0.4鍚姩杩涚▼鍚庯紝璁块棶doc.html椤甸潰锛屽http://127.0.0.1:8088/doc.html锛屽彲浠ユ壘鍒版洿绗﹀悎鐣岄潰鐨勬枃妗d綋楠屾柊鐣岄潰锛氬綋鐒讹紝杩欓噷鎴戜滑浣跨敤鐨勬槸knife4j鏈€绠€鍗曠殑鈥滄崲鑲も€濆姛鑳斤紝鑰宬nife4j浣滀负涓€娆句紭绉€鐨勫紑婧愬伐鍏凤紝鎻愪緵鐨勫姛鑳借繙涓嶆杩欎簺銆傚鏋滄偍鏈夊叴瓒o紝鍙互鐐瑰嚮姝ゅ浜嗚В鏇村銆傜患涓婃墍杩帮紝鎴戝皢涓庡ぇ瀹跺垎浜叧浜庡浣曞畬鎴怱wagger鎺ュ彛鐨勬弿杩帮紝濡備綍鐙珛纭畾鏌愪簺鍐呭鐨勬樉绀哄拰闅愯棌绛夌浉鍏冲唴瀹广€傛偍瀵规湰鏂囩殑鍐呭鏈変粈涔堟兂娉曟垨鐙埌鐨勮瑙e悧锛熸杩庡湪璇勮鍖轰竴璧蜂氦娴佽璁恒€傪煋p煋e彟澶栵細鍏充簬鏈枃娑夊強鐨刣emo浠g爜鐨勫畬鏁寸ず渚嬶紝鎴戝凡缁忕紪璇戞彁浜ゅ埌github涓婁簡銆傛湁闇€瑕佺殑鍙互鑷繁鑾峰彇锛歨ttps://github.com/veezean/JavaBasicSkills鎴戝紑绐嶄簡锛岃鐨勬槸鎶€鏈紝涓嶅彧鏄妧鏈瘇濡傛灉瑙夊緱鏈夌敤璇风偣璧?鍏虫敞璁╂垜鎰熷彈涓€涓嬩綘鐨勬敮鎸併€傚ぇ瀹朵篃鍙互鍏虫敞鎴戠殑鍏紬鍙枫€愭灦鏋勫惎钂欍€戯紝鑾峰彇鏇村強鏃剁殑鏇存柊銆傛湡寰呬笌鎮ㄦ帰璁紝鍏卞悓鎴愰暱涓烘洿濂界殑鑷繁銆?/p>