欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

SpringBoot中怎樣使用Swagger2構(gòu)建RESTfulAPI文檔

這篇文章給大家介紹Spring Boot中怎樣使用Swagger2構(gòu)建RESTful API文檔,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)專業(yè)提供電信內(nèi)江機房服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買電信內(nèi)江機房服務(wù),并享受7*24小時金牌售后服務(wù)。

由于Spring Boot能夠快速開發(fā)、便捷部署等特性,相信有很大一部分Spring Boot的用戶會用來構(gòu)建RESTful API。而我們構(gòu)建RESTful API的目的通常都是由于多終端的原因,這些終端會共用很多底層業(yè)務(wù)邏輯,因此我們會抽象出這樣一層來同時服務(wù)于多個移動端或者Web前端。

這樣一來,我們的RESTful API就有可能要面對多個開發(fā)人員或多個開發(fā)團隊:IOS開發(fā)、Android開發(fā)或是Web開發(fā)等。為了減少與其他團隊平時開發(fā)期間的頻繁溝通成本,傳統(tǒng)做法我們會創(chuàng)建一份RESTful API文檔來記錄所有接口細節(jié),然而這樣的做法有以下幾個問題:

  • 由于接口眾多,并且細節(jié)復(fù)雜(需要考慮不同的HTTP請求類型、HTTP頭部信息、HTTP請求內(nèi)容等),高質(zhì)量地創(chuàng)建這份文檔本身就是件非常吃力的事,下游的抱怨聲不絕于耳。

  • 隨著時間推移,不斷修改接口實現(xiàn)的時候都必須同步修改接口文檔,而文檔與代碼又處于兩個不同的媒介,除非有嚴格的管理機制,不然很容易導(dǎo)致不一致現(xiàn)象。

為了解決上面這樣的問題,本文將介紹RESTful API的重磅好伙伴Swagger2,它可以輕松的整合到Spring Boot中,并與Spring MVC程序配合組織出強大RESTful API文檔。它既可以減少我們創(chuàng)建文檔的工作量,同時說明內(nèi)容又整合入實現(xiàn)代碼中,讓維護文檔和修改代碼整合為一體,可以讓我們在修改代碼邏輯的同時方便的修改文檔說明。另外Swagger2也提供了強大的頁面測試功能來調(diào)試每個RESTful API。具體效果如下圖所示:

Spring Boot中怎樣使用Swagger2構(gòu)建RESTful API文檔

下面來具體介紹,如果在Spring Boot中使用Swagger2。首先,我們需要一個Spring Boot實現(xiàn)的RESTful API工程。

添加Swagger2依賴

pom.xml中加入Swagger2的依賴

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
</dependency>

<dependency>    <groupId>io.springfox</groupId>    <artifactId>springfox-swagger-ui</artifactId>    <version>2.2.2</version>
</dependency>

創(chuàng)建Swagger2配置類

Application.java同級創(chuàng)建Swagger2的配置類Swagger2

@Configuration
@EnableSwagger2
public class Swagger2 {    
   @Bean    public Docket createRestApi() {        
       return new Docket(DocumentationType.SWAGGER_2)                .apiInfo(apiInfo())                .select()                .apis(RequestHandlerSelectors.basePackage("com.didispace.web"))                .paths(PathSelectors.any())                .build();    }    
   private ApiInfo apiInfo() {        
       return new ApiInfoBuilder()                .title("Spring Boot中使用Swagger2構(gòu)建RESTful APIs")                .description("desc")                .termsOfServiceUrl("http://blog.didispace.com/")                .contact("程序猿DD")                .version("1.0")                .build();    } }

如上代碼所示,通過@Configuration注解,讓Spring來加載該類配置。再通過@EnableSwagger2注解來啟用Swagger2。

再通過createRestApi函數(shù)創(chuàng)建Docket的Bean之后,apiInfo()用來創(chuàng)建該Api的基本信息(這些基本信息會展現(xiàn)在文檔頁面中)。select()函數(shù)返回一個ApiSelectorBuilder實例用來控制哪些接口暴露給Swagger來展現(xiàn),本例采用指定掃描的包路徑來定義,Swagger會掃描該包下所有Controller定義的API,并產(chǎn)生文檔內(nèi)容(除了被@ApiIgnore指定的請求)。

添加文檔內(nèi)容

在完成了上述配置后,其實已經(jīng)可以生產(chǎn)文檔內(nèi)容,但是這樣的文檔主要針對請求本身,而描述主要來源于函數(shù)等命名產(chǎn)生,對用戶并不友好,我們通常需要自己增加一些說明來豐富文檔內(nèi)容。如下所示,我們通過@ApiOperation注解來給API增加說明、通過@ApiImplicitParams、@ApiImplicitParam注解來給參數(shù)增加說明。

@RestController
@RequestMapping(value="/users")    
// 通過這里配置使下面的映射都在/users下,可去除
public class UserController {    
   static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());
   
   @ApiOperation(value="獲取用戶列表", notes="")    
   @RequestMapping(value={""}, method=RequestMethod.GET)    
   public List<User> getUserList() {        List<User> r = new ArrayList<User>(users.values());        
       return r;    }    

   @ApiOperation(value="創(chuàng)建用戶", notes="根據(jù)User對象創(chuàng)建用戶")    
   @ApiImplicitParam(name = "user", value = "用戶詳細實體user", required = true, dataType = "User")    
   @RequestMapping(value="", method=RequestMethod.POST)    
   public String postUser(@RequestBody User user) {        users.put(user.getId(), user);        
       return "success";    }    

   @ApiOperation(value="獲取用戶詳細信息", notes="根據(jù)url的id來獲取用戶詳細信息")    
   @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long")    
   @RequestMapping(value="/{id}", method=RequestMethod.GET)    
   public User getUser(@PathVariable Long id) {        
       return users.get(id);    }    

   @ApiOperation(value="更新用戶詳細信息", notes="根據(jù)url的id來指定更新對象,并根據(jù)傳過來的user信息來更新用戶詳細信息")    
   @ApiImplicitParams({            
       @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long"),            
       @ApiImplicitParam(name = "user", value = "用戶詳細實體user", required = true, dataType = "User")    })    
   @RequestMapping(value="/{id}", method=RequestMethod.PUT)    
   public String putUser(@PathVariable Long id, @RequestBody User user) {        User u = users.get(id);        u.setName(user.getName());        u.setAge(user.getAge());        users.put(id, u);        
       return "success";    }    
   
   @ApiOperation(value="刪除用戶", notes="根據(jù)url的id來指定刪除對象")        @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long")    
   @RequestMapping(value="/{id}", method=RequestMethod.DELETE)    
   public String deleteUser(@PathVariable Long id) {        users.remove(id);        
       return "success";    } }

完成上述代碼添加上,啟動Spring Boot程序,訪問:http://localhost:8080/swagger-ui.html
。就能看到前文所展示的RESTful API的頁面。我們可以再點開具體的API請求,以POST類型的/users請求為例,可找到上述代碼中我們配置的Notes信息以及參數(shù)user的描述信息,如下圖所示。

Spring Boot中怎樣使用Swagger2構(gòu)建RESTful API文檔

API文檔訪問與調(diào)試

在上圖請求的頁面中,我們看到user的Value是個輸入框?是的,Swagger除了查看接口功能外,還提供了調(diào)試測試功能,我們可以點擊上圖中右側(cè)的Model Schema(黃色區(qū)域:它指明了User的數(shù)據(jù)結(jié)構(gòu)),此時Value中就有了user對象的模板,我們只需要稍適修改,點擊下方“Try it out!”按鈕,即可完成了一次請求調(diào)用!

此時,你也可以通過幾個GET請求來驗證之前的POST請求是否正確。

相比為這些接口編寫文檔的工作,我們增加的配置內(nèi)容是非常少而且精簡的,對于原有代碼的侵入也在忍受范圍之內(nèi)。因此,在構(gòu)建RESTful API的同時,加入swagger來對API文檔進行管理,是個不錯的選擇。

關(guān)于Spring Boot中怎樣使用Swagger2構(gòu)建RESTful API文檔就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享名稱:SpringBoot中怎樣使用Swagger2構(gòu)建RESTfulAPI文檔
瀏覽路徑:http://aaarwkj.com/article34/jegcpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、虛擬主機搜索引擎優(yōu)化、網(wǎng)站設(shè)計公司微信公眾號、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)
性感91美女白丝在线精品| 久久精品欧美日韩视频| 久久产精品一区二区三区日韩| 饥渴少妇高潮特殊按摩| 91精品国产自产在线蜜臀| 国产精品欧美日韩中文| 亚洲成人爱情动作片在线观看| 亚洲欧美另类国产一区| 人妖一区二区三区在线观看| 国产福利传媒在线观看| 亚洲视频在线视频看视频在线| 麻豆国产免费av在线| 久久婷亚洲综合五月天| 日韩精品成人区中文字幕| 风韵丰满熟妇啪啪老熟女| 国产精品大屁股一区二区| 色婷婷综合中文久久一本| 人妻中文字幕视频在线| 亚洲熟女少妇淫语高潮| 91中文字幕国产日韩| 中文字幕日韩人妻一二三区| 欧美人妻不卡一区二区久久| 精品国产一区二区av麻豆| 国产精品三级高清在线| 亚洲av色福免费网站| 激情久久五月激情婷婷| 欧美久久久久综合一区| 欧美丰满人妻少妇视频在线| 熟妇一区二区在线播放| 国产原创av剧情愿望成真| 欧美看黄网站在线观看| 亚洲国产精品成人女人| 日本中文字幕免费专区| 亚洲偷拍自拍在线观看| 日本成人一区二区三区在线| 国产精品欧美久久久久久| 精品视频在线观看传媒| 最近日本免费高清完整版| 黑人一区二区三区在线| 99热在线免费观看精品| 91久久精品国产一区|