日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot集成swagger-ui以及swagger分組顯示操作

瀏覽:28日期:2023-04-20 14:27:56

大家好,這篇文章展示下如何在springboot項(xiàng)目中集成swagger-ui。有人說(shuō),這都是老生常談,網(wǎng)上的例子數(shù)不勝數(shù)。確實(shí)swagger誕生至今已經(jīng)很久了,但是在使用過(guò)程中我遇到一個(gè)問(wèn)題,下面給大家分享下我的使用心得吧。

1.swagger配置類

第一步,需要在pom中引入相應(yīng)的配置,這里使用2.7.0的版本。需要注意的是2.7.0和2.8.0的版本在界面風(fēng)格上差異很大,如果感興趣,可以試試2.8.0以上的版本,我比較青睞使用2.7.0及以下的版本,因?yàn)榻缑姹容^清爽。

第一步 引入pom

<!--swagger--><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version></dependency><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version></dependency>

第二步

在代碼中加入相應(yīng)的配置,新建config包,寫(xiě)入swaggerConfig配置類:

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.service.ApiInfo;import springfox.documentation.service.Contact;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration@EnableSwagger2public class SwaggerConfig { /** * 創(chuàng)建API應(yīng)用 * apiInfo() 增加API相關(guān)信息 * 通過(guò)select()函數(shù)返回一個(gè)ApiSelectorBuilder實(shí)例,用來(lái)控制哪些接口暴露給Swagger來(lái)展現(xiàn), * 本例采用指定掃描的包路徑來(lái)定義指定要建立API的目錄。 * * @return */ @Bean public Docket restApi() { return new Docket(DocumentationType.SWAGGER_2) .groupName('標(biāo)準(zhǔn)接口') .apiInfo(apiInfo('Spring Boot中使用Swagger2構(gòu)建RESTful APIs', '1.0')) .useDefaultResponseMessages(true) .forCodeGeneration(false) .select() .apis(RequestHandlerSelectors.basePackage('com.xqnode.learning.controller')) .paths(PathSelectors.any()) .build(); } /** * 創(chuàng)建該API的基本信息(這些基本信息會(huì)展現(xiàn)在文檔頁(yè)面中) * 訪問(wèn)地址:http://ip:port/swagger-ui.html * * @return */ private ApiInfo apiInfo(String title, String version) { return new ApiInfoBuilder() .title(title) .description('更多請(qǐng)關(guān)注: https://jb51.net') .termsOfServiceUrl('https://jb51.net') .contact(new Contact('xqnode', 'https://jb51.net', 'xiaqingweb@163.com')) .version(version) .build(); }}

.apis(RequestHandlerSelectors.basePackage(“com.xqnode.learning.controller”))這個(gè)配置是用來(lái)指定我們的接口層的位置,大家可以根據(jù)你自己項(xiàng)目的實(shí)際情況來(lái)進(jìn)行修改。.apiInfo()是定義一些我們項(xiàng)目的描述信息,可以根據(jù)實(shí)際需要在參數(shù)中修改。需要注意的是配置類的頭部需要加上@Configuration,聲明配置類,以及@EnableSwagger2加載swagger的一些相關(guān)配置。

2.使用swagger

我們?cè)趧偛胖付ǖ慕涌趯邮褂胹wagger來(lái)說(shuō)明接口的使用方法。

import com.fasterxml.jackson.databind.ObjectMapper;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import io.swagger.annotations.ApiParam;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;import java.io.IOException;import java.util.Map;@RestController@RequestMapping('/api')@Api(tags = '標(biāo)準(zhǔn)演示接口')public class ApiController { @Resource private ObjectMapper mapper; @PostMapping('/ps') @ApiOperation(value = '接受json參數(shù)', notes = '演示json參數(shù)是否接受成功') public String post(@ApiParam(name = '接收json參數(shù)', defaultValue = '{}') @RequestBody String json) throws IOException { Map map = mapper.readValue(json, Map.class); System.out.println(map); return json; }}

然后我們啟動(dòng)項(xiàng)目,打開(kāi)http://ip:port/swagger-ui.html:

SpringBoot集成swagger-ui以及swagger分組顯示操作

不輸入任何參數(shù),點(diǎn)擊try it out!按鈕:

SpringBoot集成swagger-ui以及swagger分組顯示操作

從頁(yè)面上我們可以看到我們?cè)诮涌诘念^部指定的接口類描述(@Api),以及在接口方法上指定的方法描述(@ApiOperation),在接口參數(shù)上指定的參數(shù)描述(@ApiParam)都已經(jīng)生效,這都是基于swagger來(lái)實(shí)現(xiàn)的,但是需要注意的是swagger只能提供接口的描述信息。

3.額外的學(xué)習(xí)經(jīng)歷

我在使用swagger的時(shí)候,遇到一個(gè)需求是這樣的,我需要在兩個(gè)接口層都使用swagger,即將兩個(gè)接口層的api分組展示,例如下面這兩個(gè)接口層:

SpringBoot集成swagger-ui以及swagger分組顯示操作

我啟動(dòng)項(xiàng)目后訪問(wèn)swagger頁(yè)面,發(fā)現(xiàn)一個(gè)很奇怪的問(wèn)題,就是other層的接口看不到:

SpringBoot集成swagger-ui以及swagger分組顯示操作

我猜測(cè)原因可能是我在配置類中指定的接口層位置影響了swagger api的顯示。于是我百度了一下,找到一個(gè)解決方案,就是不指定接口層的位置,而指定注解的@RestController

@Bean public Docket restApi() { return new Docket(DocumentationType.SWAGGER_2) .groupName('standard') .apiInfo(apiInfo('Spring Boot中使用Swagger2構(gòu)建RESTful APIs', '1.0')) .useDefaultResponseMessages(true) .forCodeGeneration(false) .select()// .apis(RequestHandlerSelectors.basePackage('com.xqnode.learning.controller')) .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) .paths(PathSelectors.any()) .build(); }

swagger界面中出現(xiàn)了另一個(gè)接口的api:

SpringBoot集成swagger-ui以及swagger分組顯示操作

但是這樣的效果并不好。大家試想一下,我們?yōu)槭裁匆獙?duì)接口分層呢?不就是為了將業(yè)務(wù)隔離么,這樣在一個(gè)界面中出現(xiàn)兩個(gè)接口層的api,對(duì)于我們查找接口非常的不方便,也打亂了我們對(duì)接口分層的目的。那么怎么才能將其進(jìn)行隔離開(kāi)呢?

其實(shí)很簡(jiǎn)單,我們只需要重新定義一個(gè)Docket的bean,在其中指定另外接口層的位置即可:

@Bean public Docket restApi2() { return new Docket(DocumentationType.SWAGGER_2) .groupName('其他接口') .apiInfo(apiInfo('Other APIs', '2.0')) .select() .apis(RequestHandlerSelectors.basePackage('com.xqnode.learning.other')) .paths(PathSelectors.regex('/other.*')) .build(); }

我們?cè)谶@里指定了第二個(gè)接口層的位置,同時(shí)指定了它的路徑前綴,這樣我們?cè)趕wagger頁(yè)面中就能很方便很清晰的找到它里面的接口了。

接口層1:標(biāo)準(zhǔn)接口

SpringBoot集成swagger-ui以及swagger分組顯示操作

接口層2:其他接口

SpringBoot集成swagger-ui以及swagger分組顯示操作

現(xiàn)在我們只要通過(guò)切換分組,就可以找到我們關(guān)注的接口層的api了。

下面貼出完整的配置類:

@Configuration@EnableSwagger2public class SwaggerConfig { /** * 創(chuàng)建API應(yīng)用 * apiInfo() 增加API相關(guān)信息 * 通過(guò)select()函數(shù)返回一個(gè)ApiSelectorBuilder實(shí)例,用來(lái)控制哪些接口暴露給Swagger來(lái)展現(xiàn), * 本例采用指定掃描的包路徑來(lái)定義指定要建立API的目錄。 * * @return */ @Bean public Docket restApi() { return new Docket(DocumentationType.SWAGGER_2) .groupName('standard') .apiInfo(apiInfo('Spring Boot中使用Swagger2構(gòu)建RESTful APIs', '1.0')) .useDefaultResponseMessages(true) .forCodeGeneration(false) .select() .apis(RequestHandlerSelectors.basePackage('com.xqnode.learning.controller'))// .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) .paths(PathSelectors.regex('/api.*')) .build(); } @Bean public Docket restApi2() { return new Docket(DocumentationType.SWAGGER_2) .groupName('其他接口') .apiInfo(apiInfo('Other APIs', '2.0')) .select() .apis(RequestHandlerSelectors.basePackage('com.xqnode.learning.other')) .paths(PathSelectors.regex('/other.*')) .build(); } /** * 創(chuàng)建該API的基本信息(這些基本信息會(huì)展現(xiàn)在文檔頁(yè)面中) * 訪問(wèn)地址:http://ip:port/swagger-ui.html * * @return */ private ApiInfo apiInfo(String title, String version) { return new ApiInfoBuilder() .title(title) .description('更多請(qǐng)關(guān)注: https://jb51.net') .termsOfServiceUrl('https://jb51.net') .contact(new Contact('xqnode', 'https://jb51.net', 'xiaqingweb@163.com')) .version(version) .build(); }}

至此,springboot集成swagger2完成,同時(shí)加了一個(gè)餐,還滿意吧?哈哈

以上這篇SpringBoot集成swagger-ui以及swagger分組顯示操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区四区| 国产丝袜一区| 新版的欧美在线视频| 精品美女视频 | 亚洲v在线看| 久久久久国产一区二区| 久久激情中文| 久久91导航| 999国产精品视频| 一本一道久久a久久精品蜜桃| 精品中文字幕一区二区三区av| 国产亚洲网站| 日韩精品一二区| 91亚洲无吗| 麻豆久久一区| 成人久久一区| 久久xxxx精品视频| 日本少妇精品亚洲第一区| 国产精品视频3p| 日韩福利一区| 午夜在线精品偷拍| 日本午夜精品久久久| 国产欧美日韩精品一区二区免费 | 精品理论电影在线| 久久久成人网| 蜜桃一区二区三区在线观看| 日本成人手机在线| 国产精品3区| 久久久久免费av| 亚洲欧美日本日韩| 亚欧成人精品| 水蜜桃精品av一区二区| 免费观看不卡av| 婷婷精品久久久久久久久久不卡| 国产精品xxx在线观看| 日韩在线免费| 亚洲免费观看高清完整版在线观| 国产精品二区影院| 国产一区亚洲| 国产欧美一区二区三区国产幕精品| 成人在线视频中文字幕| 亚洲精品一区二区妖精| 日韩激情一二三区| www成人在线视频| 亚洲五月综合| 国内揄拍国内精品久久| 欧美日韩激情| 国产精品伦一区二区| 久久久人人人| 国产日韩欧美一区二区三区 | 99视频精品免费观看| 日韩av三区| 欧美日韩一区二区三区视频播放| 日韩精品成人| 久久久久99| 国产香蕉精品| 日韩免费一区| 日韩不卡手机在线v区| 久久久精品午夜少妇| 欧美视频精品全部免费观看| 亚洲高清av| 久久一区欧美| 日韩在线视频一区二区三区| 91精品推荐| 久久这里只有| 天堂久久一区| 国产主播一区| 激情综合婷婷| 日韩av中文字幕一区二区三区| 尤物tv在线精品| 国产精品a级| 亚洲免费中文| 亚洲成人va| 久久99国产精品视频| 亚洲精品伦理| 亚洲少妇自拍| 99久久视频| 荡女精品导航| 欧美日韩亚洲一区三区| 亚洲综合不卡| 国产99亚洲| 国产美女高潮在线观看| 国产欧美日韩一区二区三区在线| 亚洲综合不卡| 国产综合欧美| 精品国产免费人成网站| 日韩av一区二区在线影视| 一区二区亚洲精品| 日本不卡免费高清视频在线| 国产精品成人自拍| 日韩精品欧美成人高清一区二区| 激情偷拍久久| 丝袜美腿诱惑一区二区三区 | 日产午夜精品一线二线三线| 久久精品97| 日韩三区四区| 亚洲精品无播放器在线播放| 中文精品视频| 蜜臀91精品国产高清在线观看| 精品久久中文| 免费在线日韩av| 国产精品久久久网站| 日韩一区二区三区在线看| 日韩影院在线观看| 鲁大师成人一区二区三区| 亚洲精品网址| 好看不卡的中文字幕| 久久一级电影| 久久理论电影| 欧美日韩色图| 激情欧美日韩一区| 99热精品久久| av亚洲在线观看| 亚洲精品va| 欧美日韩在线二区| 亚洲国内欧美| 日韩午夜电影| 日韩精品一区第一页| 日本大胆欧美人术艺术动态| 在线综合视频| 中文字幕日本一区二区| 亚洲3区在线| 久久精品xxxxx| 久久不见久久见免费视频7| 欧美精品不卡| 四虎成人av| 99热精品久久| 亚洲一区二区三区四区五区午夜| 视频一区在线播放| 亚洲丝袜美腿一区| 日韩高清在线不卡| 国产日韩欧美一区| 麻豆视频一区二区| 国产成人精选| 欧美日韩免费观看视频| 久久久久免费av| 性欧美69xoxoxoxo| 日韩中文字幕亚洲一区二区va在线| 亚洲人亚洲人色久| 国产精品久久久久久久久久久久久久久 | 国产乱码精品一区二区亚洲| 国产精品色在线网站| 精品免费av| 久久一区二区三区电影| 亚洲欧美日韩精品一区二区| 在线国产日韩| 国产精品自在| sm久久捆绑调教精品一区| 一区二区小说| 香蕉久久国产| 国产精品最新| 人人精品亚洲| 蜜桃久久av一区| 国产精品久久国产愉拍| 超碰在线99| 亚洲精品小说| 日韩一区二区三区四区五区| 久久99国产精品视频| 久久精品高清| 日韩精品久久久久久| 欧美激情三区| 99久久精品费精品国产| 爽好多水快深点欧美视频| 欧美综合精品| 福利一区和二区| 国产精品美女久久久浪潮软件| 欧美一区=区三区| 亚洲黄色中文字幕| 国产色综合网| 欧美成人aaa| 国产韩日影视精品| 欧美视频久久| 一区二区三区四区在线看| 亚洲精品日本| 波多野结衣久久精品| 日本欧美在线看| 精品视频一区二区三区四区五区| 精品日韩毛片| 国产精品国产三级在线观看| 伊人久久视频| 亚洲另类视频| 高清不卡亚洲| 日韩精品国产欧美| 日韩精品一区二区三区免费观看| 亚洲ww精品| 久久黄色影院| 国产精品视频一区二区三区综合 | 中文一区一区三区免费在线观 | 一区二区三区四区日韩| 久久精品国产网站| 中文一区在线| 国产aa精品| 亚洲乱码视频| 三级精品视频| 国产乱人伦精品一区| 国产在线不卡| 麻豆传媒一区二区三区| 麻豆9191精品国产| 国产成人久久精品麻豆二区| 免费观看久久久4p|