国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第二章:Swagger2

這篇具有很好參考價值的文章主要介紹了第二章:Swagger2。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

背景介紹

什么是Swagger2

常用注解

SpringBoot整合Swagger2

生產(chǎn)環(huán)境下屏蔽Swagger2

修改Swagger2配置類

修改application.yml

使用maven package打包測試

運行測試


背景介紹

在團隊開發(fā)中,一個好的 API 文檔不但可以減少大量的溝通成本,還可以幫助一位新人快速上手業(yè)務(wù)。傳統(tǒng)的做法是由開發(fā)人員創(chuàng)建一份 RESTful API 文檔來記錄所有的接口細節(jié),并在程序員之間代代相傳。這種做法存在以下幾個問題:

1)API 接口眾多,細節(jié)復(fù)雜,需要考慮不同的HTTP請求類型、HTTP頭部信息、HTTP請求內(nèi)容等,想要高質(zhì)量的完成這份文檔需要耗費大量的精力;

2)難以維護。隨著需求的變更和項目的優(yōu)化、推進,接口的細節(jié)在不斷地演變,接口描述文檔也需要同步修訂,可是文檔和代碼處于兩個不同的媒介,除非有嚴格的管理機制,否則很容易出現(xiàn)文檔、接口不一致的情況;

Swagger2 的出現(xiàn)就是為了從根本上解決上述問題。它作為一個規(guī)范和完整的框架,可以用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù):

  • 接口文檔在線自動生成,文檔隨接口變動實時更新,節(jié)省維護成本;

  • 支持在線接口測試,不依賴第三方工具;

什么是Swagger2

Swagger2 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化Restful風(fēng)格的web服務(wù),現(xiàn)在我們使用spring boot 整合它。作用:

  • 接口的文檔在線自動生成;

  • 功能測試;

常用注解

注解 描述
@Api 將類標記為 Swagger 資源。
@ApiImplicitParam 表示 API 操作中的單個參數(shù)。
@ApiImplicitParams 允許多個 ApiImplicitParam 對象列表的包裝器。
@ApiModel 提供有關(guān) Swagger 模型的其他信息。
@ApiModelProperty 添加和操作模型屬性的數(shù)據(jù)。
@ApiOperation 描述針對特定路徑的操作或通常是 HTTP 方法。
@ApiParam 為操作參數(shù)添加額外的元數(shù)據(jù)。
@ApiResponse 描述操作的可能響應(yīng)。
@ApiResponses 允許多個 ApiResponse 對象列表的包裝器。
@Authorization 聲明要在資源或操作上使用的授權(quán)方案。
@AuthorizationScope 描述 OAuth2 授權(quán)范圍。

SpringBoot整合Swagger2

導(dǎo)入依賴

<dependency>
 ?  <groupId>io.springfox</groupId>
 ?  <artifactId>springfox-swagger2</artifactId>
 ?  <version>2.9.2</version>
 ?  <exclusions>
 ? ? ?  <exclusion>
 ? ? ? ? ?  <artifactId>swagger-models</artifactId>
 ? ? ? ? ?  <groupId>io.swagger</groupId>
 ? ? ?  </exclusion>
 ?  </exclusions>
</dependency>
?
<dependency>
 ?  <groupId>com.github.xiaoymin</groupId>
 ?  <artifactId>swagger-bootstrap-ui</artifactId>
 ?  <version>1.8.5</version>
</dependency>
?
<!-- 使用1.5.22-->
<dependency>
 ?  <groupId>io.swagger</groupId>
 ?  <artifactId>swagger-models</artifactId>
 ?  <version>1.5.22</version>
</dependency>

創(chuàng)建Swagger配置類

@Configuration
//開啟Swagger2
@EnableSwagger2
//配置生產(chǎn)環(huán)境下不可用  dev(開發(fā))、test(測試)、prod(生產(chǎn))
@Profile({"dev","test"})
public class Swagger2Configuration extends WebMvcConfigurationSupport {
 ?  //api接口包掃描路徑
 ?  public static final String
 ? ? ? ? ?  SWAGGER_SCAN_BASE_PACKAGE = "com.lky.swagger2pro.controller";
 ?  //指定當前Swagger API文檔版本
 ?  public static final String VERSION = "1.0.0";
?
 ?  /**
 ? ? * 創(chuàng)建API應(yīng)用
 ? ? * apiInfo() 增加API相關(guān)信息
 ? ? * 通過select()函數(shù)返回一個ApiSelectorBuilder實例,用來控制哪些接口暴露給Swagger來展現(xiàn),
 ? ? * 本例采用指定掃描的包路徑來定義指定要建立API的目錄。
 ? ? * @return
 ? ? */
 ?  @Bean
 ?  public Docket createRestApi() {
 ? ? ?  return new Docket(DocumentationType.SWAGGER_2)
 ? ? ? ? ? ? ?  // 接口文檔的基本信息
 ? ? ? ? ? ? ?  .apiInfo(apiInfo())
 ? ? ? ? ? ? ?  .select()
 ? ? ? ? ? ? ?  // 方法需要有ApiOperation注解才能生存接口文檔
 ? ? ? ? ? ? ?  //.apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
 ? ? ? ? ? ? ?  .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
 ? ? ? ? ? ? ?  // 路徑使用any風(fēng)格
 ? ? ? ? ? ? ?  .paths(PathSelectors.any())
 ? ? ? ? ? ? ?  .build();
 ?  }
?
 ?  /**
 ? ? * 創(chuàng)建該API的基本信息(這些基本信息會展現(xiàn)在文檔頁面中)
 ? ? * 訪問地址:http://項目實際地址/doc.html
 ? ? * @return
 ? ? */
 ?  private ApiInfo apiInfo() {
 ? ? ?  return new ApiInfoBuilder()
 ? ? ? ? ? ? ?  .title("SpringBoot中使用Swagger2構(gòu)建RestFul APIs")
 ? ? ? ? ? ? ?  .description("測試系統(tǒng)")
 ? ? ? ? ? ? ?  //.termsOfServiceUrl("http://www.**.com")
 ? ? ? ? ? ? ?  .version(VERSION)
 ? ? ? ? ? ? ?  .build();
 ?  }
?
 ?  @Override
 ?  protected void addResourceHandlers(ResourceHandlerRegistry registry) {
 ? ? ?  registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
 ? ? ?  registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
 ?  }
}

1) 完成以上配置之后,通過mybatis-generator生成model和mapper; 2) 創(chuàng)建IBookService及BookServiceImpl實現(xiàn)類; 3) 創(chuàng)建BookController

綜合案例

在自己的封裝代碼中去除對swagger分組接口的封裝,前沿技術(shù)+Shiro權(quán)限框架,java,spring boot,mybatis,文檔資料

@Api

@Api注解用在類上,說明該類的作用??梢詷擞浺粋€Controller類做為swagger文檔資源。

屬性 說明
value url的路徑值
tags 如果設(shè)置這個值、value的值會被覆蓋
produces 返回的格式類型例如:"application/json, application/xml"
consumes 接收請求參數(shù)的類型例如:"application/json, application/xml"
protocols Possible values: http, https, ws, wss.
authorizations 高級特性認證時配置

案例演示

@RestController
@Api(value = "書本管理",tags = {"書本管理"}) //tags可以代替value屬性
@RequestMapping("/book")
public class BookController {
 ?  ...
}

@ApiOperation

@ApiOperation注解用在方法上,說明方法的作用,每一個url資源的定義。

屬性 說明
value url的路徑值
tags 如果設(shè)置這個值、value的值會被覆蓋
produces 返回的格式類型例如:"application/json, application/xml"
consumes 接收請求參數(shù)的類型例如:"application/json, application/xml"
hidden 是否在文檔中顯示
notes 注釋說明
response 返回的對象
responseContainer 這些對象是有效的 "List", "Set" or "Map".,其他無效
responseReference 指定對響應(yīng)類型的引用。指定的引用可以是本地的,也可以是遠程的*將按原樣使用,并覆蓋任何指定的response()類
responseHeaders 響應(yīng)旁邊提供的可能標題列表
httpMethod "GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS" and "PATCH"
code http的狀態(tài)碼 默認 200

案例演示

@ApiOperation(value = "查詢所有書本信息", notes = "查詢返回所有書本信息集合",
 ? ? ? ? ?  produces = "application/json")
@GetMapping(value="/queryAll")
public JsonResponseBody<List<Book>> queryAll(){
 ?  try {
 ? ? ?  return bookService.queryAll();
 ?  } catch (Exception e) {
 ? ? ?  e.printStackTrace();
 ? ? ?  return new JsonResponseBody<>(500,e.getMessage());
 ?  }
}

@ApiImplicitParam

@ApilmplicitParam 注解用來描述一個參數(shù),可以配置參數(shù)的中文含義,也可以給參數(shù)設(shè)置默認值,這樣在接口測試的時候可以避免手動輸入;

屬性 說明
paramType 參數(shù)放在哪個地方
name 參數(shù)名稱
value 參數(shù)代表的含義
dataType 參數(shù)類型
dataTypeClass 參數(shù)類型
required 是否必要
defaultValue 參數(shù)的默認值

paramType

類型 作用
path 以地址的形式提交數(shù)據(jù),用于restful接口。請求參數(shù)采用@PathVariable獲取
query 直接跟參數(shù)完成自動映射賦值。請求參數(shù)可采用@RequestParam獲取
body 以流的形式提交,僅支持POST。請求參數(shù)采用@RequestBody獲取
header 參數(shù)在request headers里邊提交。請求參數(shù)采用@RequestHeader獲取
form 以form表單的形式提交,僅支持POST。

案例演示

@ApiOperation(value="查詢單個書本信息",notes = "查詢單個書本信息")
@ApiImplicitParam(value="書本ID",name="bookid",required = true,dataType = "String",defaultValue = "8f46b5018a6811e9a9c528d24413c293" )
@GetMapping("/querySingleBook")
public Book querySingleBook(String bookid){
 ?  JsonResponseBody<Book> json = bookService.selectByPrimaryKey(bookid);
 ?  return json.getData();
}

@ApiImplicitParams

@ApilmplicitParams 如果有多個參數(shù),則需要使用多個 @ApilmplicitParam 注解來描述, 多個 @ApilmplicitParam 注解需要放在一個 @ApilmplicitParams 注解中;

案例演示

@ApiOperation(value = "新增書本信息", notes = "新增書本信息"
 ? ? ? ? ?  ,produces = "application/json",consumes = "application/json")
@ApiImplicitParams({
 ? ? ? ? ?  @ApiImplicitParam(name="bookname",value="書本名稱",required = true,dataType = "String"),
 ? ? ? ? ?  @ApiImplicitParam(name="price",value="書本價格",required = true,dataType = "Double"),
 ? ? ? ? ?  @ApiImplicitParam(name="booktype",value="書本類型",required = true,dataType = "String")
})
@PostMapping("/addBook")
public JsonResponseBody<?> addBook(@RequestParam String bookname,
 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @RequestParam Double price,
 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @RequestParam String booktype){
 ?  return bookService.insert(Book.builder()
 ? ? ?  .bookid(UUID.randomUUID().toString().replace("-",""))
 ? ? ?  .bookname(bookname)
 ? ? ?  .booktype(booktype)
 ? ? ?  .price(price)
 ? ? ?  .build());
}

@ApiModel和@ApiModelProperty

@ApiModel注解描述一個Model的信息(這種一般用在post創(chuàng)建的時候,使用@RequestBody這樣的場景,請求參數(shù)無法使用 @ApiImplicitParam注解進行描述的時候;

@ApiModelProperty注解描述一個model的屬性。

屬性 說明
value 字段說明
name 參數(shù)名稱
dataType 參數(shù)類型
hidden 在文檔中隱藏
required 是否必要
example 舉例說明
notes 注釋說明

案例演示

Controller

@ApiOperation(value="修改書本信息",notes = "修改書本信息")
@PostMapping("/editBook")
public JsonResponseBody<?> editBook(@RequestBody Book book){
 ?  return bookService.updateByPrimaryKey(book);
}

注意:在這里可以不使用@ApiImplicitParam標注Swagger中的參數(shù)信息,因為在這里的輸入?yún)?shù)是實體對象,而在實體對象中已經(jīng)使用@ApiModel和@ApiModelProperty注解進行了標識。

Book實體類

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value="書本對象")
public class Book implements Serializable {
?
 ?  /**
 ? ? * 書本編號
 ? ? */
 ?  @ApiModelProperty(value="書本編號")
 ?  private String bookid;
?
 ?  /**
 ? ? * 書本名稱
 ? ? */
 ?  @ApiModelProperty(value="書本名稱")
 ?  private String bookname;
?
 ?  /**
 ? ? * 書本價格
 ? ? */
 ?  @ApiModelProperty(value="書本價格")
 ?  private Double price;
?
 ?  /**
 ? ? * 書本類型
 ? ? */
 ?  @ApiModelProperty(value="書本類型")
 ?  private String booktype;
?
 ?  private static final long serialVersionUID = 1L;
}

@ApiParam

作用在方法的參數(shù)上,用來描述接口的參數(shù)信息(一個參設(shè)置一個)

@ApiParam必須與@RequestParam@PathVariable@RequestHeader一起使用。

屬性 說明
name 參數(shù)名稱
value 參數(shù)簡單描述
defaultValue 描述參數(shù)默認值
required 是否為必傳參數(shù), false:非必傳; true:必傳
allowMultiple 指定參數(shù)是否可以通過多次出現(xiàn)來接收多個值
hidden 隱藏參數(shù)列表中的參數(shù)
example 非請求體(body)類型的單個參數(shù)示例
examples @Example(value = @ExampleProperty(mediaType = “”, value = “”)) 參數(shù)示例,僅適用于請求體類型的請求

案例演示

@ApiOperation(value="新增書本信息1",notes="新增書本信息1")
@PostMapping("/addBooks")
public JsonResponseBody<?> addBooks(
            @ApiParam(name="bookName",value="bookName",required = true) @RequestParam("bookName") String bookName,
            @ApiParam(name="price",value="price",required = true) @RequestParam("price") float price,
            @ApiParam(name="bookType",value="bookType",required = true) @RequestParam("bookType") String bookType){
      System.out.println("bookName="+bookName+",price="+price+",bookType="+bookType);
    return new JsonResponseBody<>();
}

生產(chǎn)環(huán)境下屏蔽Swagger2

為了保證接口文檔的安全,禁用了生產(chǎn)環(huán)境的加載,具體說明請看:

參考地址:https://www.jianshu.com/p/fa3230ffb27c

一般生產(chǎn)環(huán)境是不能放開swagger的,這樣接口暴露在外網(wǎng)很不安全!!!

一般生產(chǎn)環(huán)境是不能放開swagger的,這樣接口暴露在外網(wǎng)很不安全!!!

一般生產(chǎn)環(huán)境是不能放開swagger的,這樣接口暴露在外網(wǎng)很不安全!!!

修改Swagger2配置類

添加@Profile注解,指明在何種環(huán)境下可以使用Swagger2,一般情況下只有在開發(fā)(dev)和測試(test)環(huán)境下才可以使用Swagger2;而在生產(chǎn)(dev)環(huán)境下不能使用Swagger2。

@Configuration
//開啟Swagger2
@EnableSwagger2
//配置生產(chǎn)環(huán)境下不可用  dev(開發(fā))、test(測試)、prod(生產(chǎn))
@Profile({"dev","test"})
public class Swagger2Configuration extends WebMvcConfigurationSupport {
    
    ...

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

修改application.yml

修改application.yml文件,配置項目系統(tǒng)的運行環(huán)境(dev/test/prod)

spring:
  #配置swagger2生產(chǎn)和測試環(huán)境不可用
  profiles:
    active: prod

使用maven package打包測試

在自己的封裝代碼中去除對swagger分組接口的封裝,前沿技術(shù)+Shiro權(quán)限框架,java,spring boot,mybatis,文檔資料

運行測試

打開CMD,跳轉(zhuǎn)到target目錄,輸入命令:java -jar .\xxx.jar --spring.profiles.active=prod??梢灾苯哟蜷_jar包修改application.yml配置文件中spring.profiles.active屬性切換運行環(huán)境,具體請參考以下配置:

開發(fā)環(huán)境:dev;

生產(chǎn)環(huán)境:prod;

測試環(huán)境:test;

在自己的封裝代碼中去除對swagger分組接口的封裝,前沿技術(shù)+Shiro權(quán)限框架,java,spring boot,mybatis,文檔資料文章來源地址http://www.zghlxwxcb.cn/news/detail-835325.html

?以上就是今天有關(guān)于Swagger2的介紹和使用!

到了這里,關(guān)于第二章:Swagger2的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 第二章-算法

    第二章-算法

    算法是解決特定問題求解步驟的描述,在計算機中表現(xiàn)為指令的有限序列,并且每條指令表示一個或多個操作。 算法有五個基本特征:輸入、輸出、有窮性、確定性和可行性。 輸入:算法具有零個或者多個輸入。 輸出:算法至少有一個或多個輸出。 有窮性:算法在執(zhí)行了有

    2024年02月14日
    瀏覽(33)
  • 第二章 編程基礎(chǔ)

    第二章 編程基礎(chǔ)

    內(nèi)容框圖 單行注釋: 快速注釋: 多行注釋: 使用+號拼接 使用拼接函數(shù) 列表 列表是一個有序的序列結(jié)構(gòu),可以存放不同數(shù)據(jù)類型的數(shù)據(jù)。 列表每一個元素有一個索引。 列表可以進行一系列操作,添加,刪除,修改元素。 元組是一個有序的序列結(jié)構(gòu),基本結(jié)構(gòu)和列表類似。

    2024年02月06日
    瀏覽(38)
  • 第二章:基本概念(下)

    人們往往將信號稱為**“軟件中斷”**。進程收到信號,就意味著某一事件或異常情況的發(fā)生。 信號的類型很多,每一種分別標識不同的事件或情況。采用 不同的整數(shù) 來標識各種信號類型,并以SIGxxxx 形式的符號名加以定義。 內(nèi)核、其他進程(只要具有相應(yīng)的權(quán)限)或進程自

    2024年02月08日
    瀏覽(30)
  • 第二章 集合

    第二章 集合

    提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 例如:第一章 Python 機器學(xué)習(xí)入門之pandas的使用 提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 HashSet 底層就是基于 HashMap 實現(xiàn)的。兩者主要區(qū)別: 線程是否安全: HashMap 是非

    2024年02月02日
    瀏覽(19)
  • 信息系統(tǒng)安全(第二章)

    信息系統(tǒng)安全(第二章)

    2.1.1基本概念 在網(wǎng)絡(luò)開放環(huán)境中,信息系統(tǒng)易遭受各種各樣的攻擊,例如消息竊聽,身份偽裝,消息偽造與篡 改,消息重放等。這種入侵行為的實施相當一部分建立在入侵者獲得已經(jīng)存在的通信通道或偽裝身 份與系統(tǒng)建立通信通道的基礎(chǔ)上。因此,在信息系統(tǒng)中,用戶在登

    2024年04月09日
    瀏覽(28)
  • 操作系統(tǒng)——第二章

    一.單選題(共30題,60.0分) 1 ()是指從作業(yè)提交給系統(tǒng)到作業(yè)完成的時間間隔 (2.0分) A、 周轉(zhuǎn)時間 B、 響應(yīng)時間 C、 等待時間 D、 運行時間 正確答案: A 2 引入多道程序設(shè)計技術(shù)之后,處理器的利用率() (2.0分) A、 有所改善 B、 極大提高 C、 降低 D、 無變化 正確答

    2023年04月08日
    瀏覽(25)
  • 第二章 變量和引用

    第二章 變量和引用

    目錄 2.1. 深入認識變量 2.1.1. 什么是變量 2.1.2. 變量的名稱 2.1.3. 變量的類型 2.1.4. 變量的定義 2.1.5. 自定義變量 2.1.6. 環(huán)境變量 2.1.7. 位置變量 2.2. 變量賦值和作用域 2.2.1. 顯示賦值:變量名=變量值 2.2.2. read 從鍵盤讀入變量值 2.2.3. 變量和引號 2.2.4. 變量的作用域 變量是在程序

    2024年02月20日
    瀏覽(20)
  • 第二章 re模塊

    第二章 re模塊

    在處理字符串時,經(jīng)常會有查找符合某些復(fù)雜規(guī)則的字符串的需求。正則表達式就是用于描述這些規(guī)則的工具。換句話說,正則表達式就是記錄文本規(guī)則的代碼。 Python 提供了 re 模塊用于實現(xiàn)正則表達式的操作。在實現(xiàn)時,可以使用 re 模塊提供的方法,如search()、match()、fi

    2024年02月09日
    瀏覽(23)
  • 第二章 翻譯

    第二章 翻譯

    Section Ⅲ Translation Directions: In this section, there is a text in English. Translate it into Chinese. Write your translation on ANSWER SHEET 2. (15points) “Sustainability” has become a popular word these days, but to Ted Ning, the concept will always have personal meaning. Having endured a painful period of unsustainability in his own life made it

    2024年02月08日
    瀏覽(33)
  • 第二章 進程管理

    第二章 進程管理

    目錄 2.1? 進程的引入 2.1.1程序的順序執(zhí)行 1.程序的順序執(zhí)行 2.程序順序執(zhí)行時的特征 2.1.2? 程序的并發(fā)執(zhí)行及其特征 1.并發(fā)執(zhí)行的概念 2.程序并發(fā)執(zhí)行時的特征 2.1.3? 進程的定義與特征 1.進程的定義 2.進程的特征 2.1.4? 進程的基本狀態(tài)及轉(zhuǎn)換 1.進程的三個基本狀態(tài)

    2024年02月04日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包