摘要:再通過函數(shù)創(chuàng)建的之后,用來創(chuàng)建該的基本信息這些基本信息會(huì)展現(xiàn)在文檔頁面中。函數(shù)返回一個(gè)實(shí)例用來控制哪些接口暴露給來展現(xiàn),本例采用指定掃描的包路徑來定義,會(huì)掃描該包下所有定義的,并產(chǎn)生文檔內(nèi)容除了被指定的請(qǐng)求。
這里有個(gè)地方需要注意,在測試WebFlux集成Swagger2的時(shí)候存在問題,看了官方文檔現(xiàn)在2.9.2還沒有集成,所以引入的jar是spring-boot-starter-web,而不是spring-boot-starter-webflux本章目的
在項(xiàng)目中集成文檔及接口測試平臺(tái),使用Swagger2可以快速幫助我們編寫最新的API接口文檔,再也不用擔(dān)心開會(huì)前仍忙于整理各種資料了,間接提升了團(tuán)隊(duì)開發(fā)的溝通效率。
添加Swagger2依賴在pom.xml中加入Swagger2的依賴
創(chuàng)建Swagger2配置io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2
package io.intodream.kotlin04.config 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 /** * @description * 構(gòu)建一個(gè)Swagger2配置文件 * @author Jwenk * @copyright intoDream.io 筑夢(mèng)科技 * @email xmsjgzs@163.com * @date 2019-03-31,21:55 */ @Configuration @EnableSwagger2 class Swagger2Config { @Bean fun createRestApi(): Docket { return Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() } private fun apiInfo(): ApiInfo { return ApiInfoBuilder() .title("Spring Boot2.X Kotlin 中使用Swagger2構(gòu)建RESTFul APIs") .description("更多SpringBoot2.X Kotlin 文章請(qǐng)關(guān)注:惜魚博客") .termsOfServiceUrl("https://www.intodream.io") .contact(Contact("惜魚", "https://www.tisnz.com", "xmsjgzs@163.com")) .version("1.0.0") .build() } }
如上代碼所示,通過@Configuration注解,讓Spring來加載該類配置。再通過@EnableSwagger2注解來啟用Swagger2。
再通過createRestApi函數(shù)創(chuàng)建Docket的Bean之后,apiInfo()用來創(chuàng)建該Api的基本信息(這些基本信息會(huì)展現(xiàn)在文檔頁面中)。select()函數(shù)返回一個(gè)ApiSelectorBuilder實(shí)例用來控制哪些接口暴露給Swagger來展現(xiàn),本例采用指定掃描的包路徑來定義,Swagger會(huì)掃描該包下所有Controller定義的API,并產(chǎn)生文檔內(nèi)容(除了被@ApiIgnore指定的請(qǐng)求)。
編寫文檔內(nèi)容在完成上面的配置后,其實(shí)Swagger會(huì)自動(dòng)幫我們生成API的文檔,但是自動(dòng)生成的文檔顯示并不友好,我們通常需要添加一些額外的信息,這時(shí)候就需要通過@ApiOperation注解在API上增加說明,通過@ApiImplicitParams、@ApiImplicitParam注解來給參數(shù)增加說明。
package io.intodream.kotlin04.web import io.intodream.kotlin04.model.Student import io.swagger.annotations.Api import io.swagger.annotations.ApiImplicitParam import io.swagger.annotations.ApiOperation import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.web.bind.annotation.* import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentMap /** * @description * * @author Jwenk * @copyright intoDream.io 筑夢(mèng)科技 * @email xmsjgzs@163.com * @date 2019-03-31,22:07 */ @Api(value = "學(xué)生信息相關(guān)接口", tags = ["學(xué)生"]) @RestController @RequestMapping("/api/student") class StudentController { private var repository : ConcurrentMap= ConcurrentHashMap () private val logger : Logger = LoggerFactory.getLogger(this.javaClass) @ApiOperation(value = "保存一條學(xué)生信息") @ApiImplicitParam(name = "student", value = "學(xué)生詳細(xì)實(shí)體student", required = true, dataType = "Student") @PostMapping("/") fun save(@RequestBody student: Student): Student? { logger.info("請(qǐng)求參數(shù):{}", student) return repository.put(student.id, student) } @ApiOperation(value = "獲取學(xué)生列表") @GetMapping("/list") fun listStudent():List { val studentList = ArrayList (repository.values) logger.info("返回?cái)?shù)據(jù):{}", studentList) return studentList } @ApiOperation(value = "通過學(xué)生編號(hào)獲取學(xué)生詳細(xì)信息") @ApiImplicitParam(name = "studentId", value = "學(xué)生編號(hào)", required = true, dataType = "String") @GetMapping("/info") fun studentInfo(@RequestParam studentId: String): Student? { val student : Student? = repository.get(studentId) logger.info("studentId:{}, 對(duì)應(yīng)的數(shù)據(jù):{}", student) return student } @ApiImplicitParam(name = "studentId", value = "學(xué)生編號(hào)", required = true, dataType = "String") @ApiOperation(value = "刪除學(xué)生信息") @DeleteMapping("/") fun deleteStudent(@RequestParam studentId: String): String { logger.info("刪除學(xué)生編號(hào):{}", studentId) repository.remove(studentId) return "success" } }
完成上述代碼添加上,啟動(dòng)Spring Boot程序,訪問:http://localhost:8080/swagger-ui.html。就能看到前文所展示的RESTful API的頁面。我們可以再點(diǎn)開具體的API請(qǐng)求,以POST類型的/api/student/請(qǐng)求為例,可找到上述代碼中我們配置的Notes信息以及參數(shù)student的描述信息,如下圖所示。
在上圖請(qǐng)求的頁面中,我們看到student的Example Value是個(gè)輸入框?是的,Swagger除了查看接口功能外,還提供了調(diào)試測試功能,我們可以點(diǎn)擊上圖中右側(cè)的Model Schema(黃色區(qū)域:它指明了User的數(shù)據(jù)結(jié)構(gòu)),此時(shí)Example Value中就有了student對(duì)象的模板,我們只需要稍適修改,點(diǎn)擊下方“Try it out!”按鈕,即可完成了一次請(qǐng)求調(diào)用!
到此我們集成Swagger2就完成了,大家可以多測試一下看返回結(jié)果是否正確,感覺是不是寫接口文檔方便了很多呢。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74093.html
摘要:下一代服務(wù)端開發(fā)下一代服務(wù)端開發(fā)第部門快速開始第章快速開始環(huán)境準(zhǔn)備,,快速上手實(shí)現(xiàn)一個(gè)第章企業(yè)級(jí)服務(wù)開發(fā)從到語言的缺點(diǎn)發(fā)展歷程的缺點(diǎn)為什么是產(chǎn)生的背景解決了哪些問題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級(jí)服務(wù)開發(fā)在移動(dòng)開發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》 Kotlin + Spring Boot : 下一代 Java...
摘要:今天給你們帶來集成的教程。接口返回結(jié)果不明確。這些痛點(diǎn)在前后端分離的大型項(xiàng)目上顯得尤為煩躁。接口返回結(jié)果非常明確,包括數(shù)據(jù)類型,狀態(tài)碼,錯(cuò)誤信息等。生成后的文件依賴如下這里使用的是的版本。另外,關(guān)注之后在發(fā)送可領(lǐng)取免費(fèi)學(xué)習(xí)資料。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人如有問題或建議,請(qǐng)后臺(tái)留言,我會(huì)盡力解決你的問題。 前言 快過年了,不知道你們啥時(shí)候放年假,忙不忙。反正我是挺閑的,所以有時(shí)間寫 b...
摘要:另外很容易構(gòu)建風(fēng)格的,簡單優(yōu)雅帥氣,正如它的名字。配置一些基本的信息。三寫生產(chǎn)文檔的注解通過注解表明該接口會(huì)生成文檔,包括接口名請(qǐng)求方法參數(shù)返回信息的等等。四參考資料中使用構(gòu)建強(qiáng)大的文檔 swagger,中文拽的意思。它是一個(gè)功能強(qiáng)大的api框架,它的集成非常簡單,不僅提供了在線文檔的查閱,而且還提供了在線文檔的測試。另外swagger很容易構(gòu)建restful風(fēng)格的api,簡單優(yōu)雅帥氣...
閱讀 1029·2023-04-26 02:26
閱讀 2134·2021-09-26 10:16
閱讀 1544·2019-08-30 12:57
閱讀 3461·2019-08-29 16:10
閱讀 3213·2019-08-29 13:47
閱讀 1182·2019-08-29 13:12
閱讀 2135·2019-08-29 11:11
閱讀 1330·2019-08-26 13:28