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

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

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

瀏覽:150日期:2023-03-11 15:40:14
一. 首先Swagger是什么?

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)。總體目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來更新。文件的方法,參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來始終保持同步。Swagger官方API文檔:https://swagger.io/

作用:  1. 接口的文檔在線自動(dòng)生成。  2. 功能測試。

Swagger的主見介紹:

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

Swagger Codegen: 通過Codegen 可以將描述文件生成html格式和cwiki形式的接口文檔,同時(shí)也能生成多鐘語言的服務(wù)端和客戶端的代碼。支持通過jar包,docker,node等方式在本地化執(zhí)行生成。也可以在后面的Swagger Editor中在線生成。

  Swagger UI: 提供了一個(gè)可視化的UI頁面展示描述文件。接口的調(diào)用方、測試、項(xiàng)目經(jīng)理等都可以在該頁面中對(duì)相關(guān)接口進(jìn)行查閱和做一些簡單的接口請(qǐng)求。該項(xiàng)目支持在線導(dǎo)入描述文件和本地部署UI項(xiàng)目。

  Swagger Editor: 類似于markendown編輯器的編輯Swagger描述文件的編輯器,該編輯支持實(shí)時(shí)預(yù)覽描述文件的更新效果。也提供了在線編輯器和本地部署編輯器兩種方式。

  Swagger Inspector: 感覺和postman差不多,是一個(gè)可以對(duì)接口進(jìn)行測試的在線版的postman。比在Swagger UI里面做接口請(qǐng)求,會(huì)返回更多的信息,也會(huì)保存你請(qǐng)求的實(shí)際請(qǐng)求參數(shù)等數(shù)據(jù)。

  Swagger Hub: 集成了上面所有項(xiàng)目的各個(gè)功能,你可以以項(xiàng)目和版本為單位,將你的描述文件上傳到Swagger Hub中。在Swagger Hub中可以完成上面項(xiàng)目的所有工作,需要注冊(cè)賬號(hào),分免費(fèi)版和收費(fèi)版。

PS:  Springfox Swagger: Spring 基于 swagger 規(guī)范,可以將基于 SpringMVC 和 Spring Boot 項(xiàng)目的項(xiàng)目代碼,自動(dòng)生成 JSON 格式的描述文件。本身不是屬于 Swagger 官網(wǎng)提供的,在這里列出來做個(gè)說明,方便后面作一個(gè)使用的展開。

二. Swagger UI的使用:

Swagger注解解釋:

@Api:請(qǐng)求類的說明@Api:放在 請(qǐng)求的類上,與 @Controller 并列,說明類的作用,如用戶模塊,訂單類等。tags='說明該類的作用'value='該參數(shù)沒什么意義,所以不需要配置'

常用注解: - @Api()用于類; 表示標(biāo)識(shí)這個(gè)類是swagger的資源 - @ApiOperation()用于方法; 表示一個(gè)http請(qǐng)求的操作 - @ApiParam()用于方法,參數(shù),字段說明; 表示對(duì)參數(shù)的添加元數(shù)據(jù)(說明或是否必填等) - @ApiModel()用于類 表示對(duì)類進(jìn)行說明,用于參數(shù)用實(shí)體類接收 - @ApiModelProperty()用于方法,字段 表示對(duì)model屬性的說明或者數(shù)據(jù)操作更改 - @ApiIgnore()用于類,方法,方法參數(shù) 表示這個(gè)方法或者類被忽略 - @ApiImplicitParam() 用于方法 表示單獨(dú)的請(qǐng)求參數(shù) - @ApiImplicitParams() 用于方法包含多個(gè) @ApiImplicitParam

(1). @Api: 請(qǐng)求類的說明

@Api:放在 請(qǐng)求的類上,與 @Controller 并列,說明類的作用,如用戶模塊,訂單類等。tags='說明該類的作用'value='描述該類作用' [推薦用這個(gè)]@Api 其它屬性配置:屬性名稱 備注value url的路徑值tags 如果設(shè)置這個(gè)值、value的值會(huì)被覆蓋description 對(duì)api資源的描述basePath 基本路徑position 如果配置多個(gè)Api 想改變顯示的順序位置produces 如, “application/json, application/xml”consumes 如, “application/json, application/xml”protocols 協(xié)議類型,如: http, https, ws, wss.authorizations 高級(jí)特性認(rèn)證時(shí)配置hidden 配置為true ,將在文檔中隱藏

(2). @ApiOperation:方法的說明

@ApiOperation:'用在請(qǐng)求的方法上,說明方法的作用' value='說明方法的作用' notes='方法的備注說明'

(3). @ApiImplicitParams、@ApiImplicitParam:方法參數(shù)的說明

@ApiImplicitParams:用在請(qǐng)求的方法上,包含一組參數(shù)說明@ApiImplicitParam:對(duì)單個(gè)參數(shù)的說明 name:參數(shù)名value:參數(shù)的漢字說明、解釋required:參數(shù)是否必須傳paramType:參數(shù)放在哪個(gè)地方· header --> 請(qǐng)求參數(shù)的獲取:@RequestHeader· query --> 請(qǐng)求參數(shù)的獲取:@RequestParam· path(用于restful接口)--> 請(qǐng)求參數(shù)的獲取:@PathVariable· body(請(qǐng)求體)--> @RequestBody User user· form(普通表單提交) dataType:參數(shù)類型,默認(rèn)String,其它值dataType='Integer' defaultValue:參數(shù)的默認(rèn)值

示例:

@Api(tags='用戶模塊')@Controllerpublic class UserController {@ApiOperation(value='用戶登錄',notes='隨邊說點(diǎn)啥')@ApiImplicitParams({@ApiImplicitParam(name='mobile',value='手機(jī)號(hào)',required=true,paramType='form'),@ApiImplicitParam(name='password',value='密碼',required=true,paramType='form'),@ApiImplicitParam(name='age',value='年齡',required=true,paramType='form',dataType='Integer')})@PostMapping('/login')public JsonResult login(@RequestParam String mobile, @RequestParam String password,@RequestParam Integer age){//... return JsonResult.ok(map);}}

(4). @ApiResponses、@ApiResponse:方法返回值的說明

@ApiResponses:方法返回對(duì)象的說明@ApiResponse:每個(gè)參數(shù)的說明 code:數(shù)字,例如400 message:信息,例如'請(qǐng)求參數(shù)沒填好' response:拋出異常的類

(5). @ApiModel:用于JavaBean上面,表示一個(gè)JavaBean(如:響應(yīng)數(shù)據(jù))的信息

@ApiModel:用于JavaBean的類上面,表示此 JavaBean 整體的信息(這種一般用在post創(chuàng)建的時(shí)候,使用 @RequestBody 這樣的場景,請(qǐng)求參數(shù)無法使用 @ApiImplicitParam 注解進(jìn)行描述的時(shí)候 )

(6). @ApiModelProperty:用在JavaBean類的屬性上面,說明屬性的含義

@ApiModel(description= '返回響應(yīng)數(shù)據(jù)')public class RestMessage implements Serializable{@ApiModelProperty(value = '是否成功')private boolean success=true;@ApiModelProperty(value = '返回對(duì)象')private Object data;@ApiModelProperty(value = '錯(cuò)誤編號(hào)')private Integer errCode;@ApiModelProperty(value = '錯(cuò)誤信息')private String message;/* getter/setter 略*/}三. Swagger整合SpringBoot1. Pom依賴:

<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>2. 配置類:

package com.zhiyou100.configBeans;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.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;/** * @Author ZhengZiXuan * @Desc */@Configuration // @Configuration注解,讓Spring來加載該類配置。@EnableSwagger2 //@EnableSwagger2注解來啟用Swagger2public class SwaggerConfigBean { /** * 創(chuàng)建API應(yīng)用 * apiInfo() 增加API相關(guān)信息 * 通過select()函數(shù)返回一個(gè)ApiSelectorBuilder實(shí)例,用來控制哪些接口暴露給Swagger來展現(xiàn), * 本例采用指定掃描的包路徑來定義指定要建立API的目錄。 * * @return */ @Bean public Docket createRestApi(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage('com.zhiyou100.controller')).paths(PathSelectors.any()).build(); } /** * 創(chuàng)建該API的基本信息(這些基本信息會(huì)展現(xiàn)在文檔頁面中) * 訪問地址:http://項(xiàng)目實(shí)際地址/swagger-ui.html * @return */ private ApiInfo apiInfo() {return new ApiInfoBuilder().title('使用Swagger2 構(gòu)建RESTful APIS - 廢物').description('廢物 - Swagger使用演示').termsOfServiceUrl('www.zzxBIuBIuBIu.com').version('1.0').build(); }}3. 正常的Controller再加Swagger注解:

package com.zhiyou100.controller;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiOperation;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/** * @Author ZhengZiXuan * @Desc */@Controller@Api('測試Swagger 的Controller類')public class TestController { @ApiOperation(value='根據(jù)id查詢名字',notes = '備注:無') @ApiImplicitParam(name = 'id',value = '用戶id',required = true, paramType = 'query',dataType = 'Integer') @RequestMapping('/getNameById') @ResponseBody public String getNameById(int id){return '張三'; }}

4.啟動(dòng)測試:

http://localhost:8080/swagger-ui.html

四. 訪問404Bug的解決方法

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

Swagger UI 界面介紹:

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

五. Model對(duì)象增刪改查演示

對(duì)User類實(shí)現(xiàn)增刪改查,生成api文檔

package com.zhiyou100.model;/** * @Author ZhengZiXuan * @Date 2021/05/10 * @Desc */public class User { private int id; private String name; private String password; @Override public String toString() {return 'User{' +'id=' + id +', name=’' + name + ’’’ +', password=’' + password + ’’’ +’}’; } public User() { } public int getId() {return id; } public void setId(int id) {this.id = id; } public String getName() {return name; } public void setName(String name) {this.name = name; } public String getPassword() {return password; } public void setPassword(String password) {this.password = password; } public User(int id, String name, String password) {this.id = id;this.name = name;this.password = password; }}

package com.zhiyou100.controller;import com.zhiyou100.model.User;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import org.springframework.web.bind.annotation.*;import java.util.ArrayList;import java.util.List;/** * @Author ZhengZiXuan * @Date 2021/05/10 * @Desc 有點(diǎn)BUG 就是list集合中的增刪改 */@RestController@Api('User類的增刪改查API')public class UserController { ArrayList<User> users = null; public UserController(){users = new ArrayList<>();users.add(new User(1,'張三','123'));users.add(new User(2,'李四','1234'));users.add(new User(3,'王五','12345'));System.out.println('init users '+users); } /** * 根據(jù)id查User */ @ApiOperation('根據(jù)id查用戶') @ApiImplicitParam(name = 'id',value = '用戶id', required = true,paramType = 'path',dataType = 'Integer') @RequestMapping(value='/user/get/{id}',method = RequestMethod.GET) public User getUserById(@PathVariable('id') Integer id){System.out.println('getUserById id: '+id);if (id != null){ if (id>0 && id <4){User user = users.get(id);System.out.println('getUserById User: '+user);return user; }}return null; } /** * 查全部user */ @ApiOperation('查詢?nèi)坑脩?) @RequestMapping(value='/user/get',method = RequestMethod.GET) public List<User> getAllUser(){System.out.println('getAllUser');return users; } /** * 添加User */ @ApiOperation('添加用戶') @ApiImplicitParam(name='user',value = '用戶對(duì)象',paramType = 'body',dataType = 'User') @RequestMapping(value='/user/add',method = RequestMethod.POST) public User addUser(@RequestBody User user){System.out.println('addUser User:'+user);if (user == null || user.getId() == 0){ return null;}users.add(user);return user; } /** * 刪除User */ @ApiOperation('根據(jù)id刪除用戶') @ApiImplicitParam(name = 'id',value = '用戶id', required = true,paramType = 'path', dataType = 'Integer') @RequestMapping(value='/user/delete/{id}',method = RequestMethod.DELETE) public boolean delUserById(@PathVariable('id') Integer id){System.out.println('delUserById id:'+id);if (id != null){ users.remove(id); return true;}return false; } /** * 更新User */ @ApiOperation('根據(jù)id更新用戶') @ApiImplicitParams({ @ApiImplicitParam(name = 'id',value = '用戶id', required = true,paramType = 'path', dataType = 'Integer'), @ApiImplicitParam(name = 'user',value = '用戶對(duì)象', required = true,paramType = 'body', dataType = 'User')}) @RequestMapping(value='/user/update/{id}',method = RequestMethod.PUT) public boolean UpdateUserById(@PathVariable('id') Integer id,@RequestBody User user){System.out.println('UpdateUserById id:'+id+' , User:'+user);if (id != null && user != null){ users.add(id,user); return true;}return false; }}

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

1. 查詢?nèi)?

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

2. 根據(jù)id查:

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

3. 添加用戶:

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

4.更新用戶:

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

5. 刪除用戶:

在SpringBoot項(xiàng)目中的使用Swagger的方法示例

到此這篇關(guān)于在SpringBoot項(xiàng)目中的使用Swagger的方法示例的文章就介紹到這了,更多相關(guān)SpringBoot使用Swagger內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久性天堂网| 日韩影院免费视频| 国产精品夜夜夜| 91成人在线网站| 国产欧美欧美| 成人国产精品一区二区网站| 不卡专区在线| 成人羞羞在线观看网站| 亚洲特色特黄| 日本一区二区三区视频在线看| 亚洲午夜久久| 国产精品视频一区二区三区四蜜臂 | 国产成人精品一区二区免费看京 | 精品一区二区三区中文字幕| 国产欧美一区二区三区国产幕精品| 国产精品乱战久久久| 四虎成人av| 首页欧美精品中文字幕| 国产美女视频一区二区| 日韩欧美国产精品综合嫩v| 国产亚洲精品久久久久婷婷瑜伽| 日韩有吗在线观看| av中文资源在线资源免费观看| 亚洲精品97| 青草国产精品| 日韩成人亚洲| 日韩和欧美一区二区三区| 精品99在线| 亚洲综合精品| 麻豆91精品91久久久的内涵| 免费精品国产的网站免费观看| 97成人在线| 久久影院一区| 国产欧美日韩一区二区三区在线| 日韩一区二区三区免费| 日本麻豆一区二区三区视频| 人人草在线视频| 亚洲a成人v| 久久精品国产大片免费观看| 国产日本亚洲| 欧美日韩第一| 精品视频在线你懂得| 日韩中文字幕区一区有砖一区| 91偷拍一区二区三区精品| 国产精品呻吟| 精品国产一区二区三区2021| 视频一区视频二区中文| 91一区二区三区四区| 日韩国产91| 黑丝一区二区| 日韩欧美不卡| 欧美a一区二区| 男女性色大片免费观看一区二区| 精品久久久久中文字幕小说| 日韩一区二区三免费高清在线观看| 久久久精品午夜少妇| 国产高清日韩| 午夜久久av| 日韩视频在线一区二区三区 | 岛国av免费在线观看| 日韩激情一二三区| 午夜在线播放视频欧美| 99久久婷婷| 国产传媒在线观看| 国产福利资源一区| 国产亚洲精aa在线看| 中文字幕一区二区av| 欧洲激情综合| 日韩欧美少妇| 日韩一区欧美| 精品国产一区二区三区性色av| 久久久一本精品| 国产亚洲在线| 色天使综合视频| 久久精品理论片| 欧美亚洲福利| 中文字幕av一区二区三区人 | 老司机免费视频一区二区| 日韩影院在线观看| 黄色成人91| 欧美综合另类| 亚洲成人一区在线观看| 婷婷精品在线| 亚洲精品伦理| 亚洲一区欧美| 综合亚洲视频| 国产精品亚洲综合在线观看| 97久久中文字幕| 日韩精品亚洲专区| 色综合视频一区二区三区日韩 | 日韩国产在线不卡视频| 亚洲理论在线| 中文字幕乱码亚洲无线精品一区| 久久香蕉精品| 2023国产精品久久久精品双| 久久中文字幕av| 久久久久久久久丰满| jizzjizz中国精品麻豆| 激情黄产视频在线免费观看| 精品99在线| 青青青免费在线视频| 欧美freesex黑人又粗又大| 91亚洲一区| 99精品国产一区二区三区| 久久亚洲成人| 亚洲欧美日韩国产一区二区| 久久亚洲欧美| 日本免费在线视频不卡一不卡二| 亚洲欧美日韩精品一区二区| 亚洲无线观看| 欧美一级二级视频| 美女视频免费精品| 欧美freesex黑人又粗又大| 日韩免费av| 久久三级视频| 国产精品人人爽人人做我的可爱| 国产精品老牛| 色综合视频一区二区三区日韩 | 亚洲2区在线| 国产欧美日韩综合一区在线播放| 欧美国产中文高清| 日韩啪啪电影网| 欧美专区在线| 欧美日韩亚洲三区| 成人综合一区| 黄色亚洲免费| 欧美亚洲tv| 国产日韩一区二区三区在线| 久久69成人| 激情欧美国产欧美| 亚洲精品欧美| 国产精品亚洲综合久久| 成人av三级| 免费成人av在线播放| 国产精品亚洲四区在线观看| 日韩网站中文字幕| 亚久久调教视频| 激情国产在线| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产美女久久| 久久精品99久久无色码中文字幕| 一区二区三区四区在线观看国产日韩| 亚州欧美在线| 麻豆理论在线观看| 亚洲综合婷婷| 精品国内亚洲2022精品成人| 欧美女激情福利| 久久不卡日韩美女| 宅男噜噜噜66国产日韩在线观看| 国产美女久久| 99国产精品久久久久久久| 国产精品久久久久久妇女| 午夜精品一区二区三区国产| 国产精品毛片久久久| 国产精品毛片| 中文一区一区三区高中清不卡免费| 首页亚洲欧美制服丝腿| 精品美女视频| 日韩精品久久久久久| 蜜桃精品在线| 国产精品毛片久久久| 午夜一级在线看亚洲| 日韩一区三区| 国产精品久久久久久久久免费高清 | 亚洲精品在线影院| 日韩高清一区| 91久久中文| 国产美女高潮在线| 国产精品久久久久久久久久白浆 | 欧美精品影院| 天堂成人国产精品一区| 日韩理论视频| 麻豆精品蜜桃视频网站| 亚洲在线久久| 在线亚洲国产精品网站| 日韩在线免费| 精品一区视频| 国产欧美高清| 日本一区二区三区中文字幕| 国产女优一区| 99久久九九| 日韩精品专区| 国产精品美女在线观看直播| 中文字幕av一区二区三区人| 欧美亚洲精品在线| 日韩成人综合| 精品资源在线| 欧美国产另类| 国产精品亚洲人成在99www| 亚洲制服欧美另类| 三级欧美在线一区| 亚洲综合丁香| 另类av一区二区| 免费久久99精品国产自在现线| 欧美中文字幕一区二区| 日韩欧美网址| 成人免费电影网址| 成人羞羞在线观看网站| 日韩国产一区| 日韩精品久久久久久久电影99爱|