swagger使用指引

1.swagger介紹

在前后端分離開發中通常由后端程序員設計接口,完成后需要編寫接口文檔,最后將文檔交給前端工程師,前端工程師參考文檔進行開發。

可以通過一些工具快速生成接口文檔 ,本項目通過Swagger生成接口在線文檔 。

什么是Swagger?

OpenAPI規范(OpenAPI Specification 簡稱OAS)是Linux基金會的一個項目,試圖通過定義一種用來描述API格式或API定義的語言,來規范RESTful服務開發過程,目前版本是V3.0,并且已經發布并開源在github上。

(GitHub - OAI/OpenAPI-Specification: The OpenAPI Specification Repository)

Swagger是全球最大的OpenAPI規范(OAS)API開發工具框架,Swagger是一個在線接口文檔的生成工具,前后端開發人員依據接口文檔進行開發。 (API Documentation & Design Tools for Teams | Swagger)

Spring Boot 可以集成Swagger,Swaager根據Controller類中的注解生成接口文檔 ,只要添加Swagger的依賴和配置信息即可使用它。

2.引入swagger依賴

在api模塊中,引入springboot集成swagger的依賴

        <!--springboot集成swagger--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId></dependency><!--swagger的版本,如果使用父模塊管理是如下格式,也可以在本模塊<version/>標簽標注--><swagger-spring-boot-starter.version>1.9.0.RELEASE</swagger-spring-boot-starter.version>

3.添加swagger配置

在bootstrap.yml配置文件中(也可能是application.yml),引入swagger配置;

其中base-package為掃描的包路徑,掃描Controller類.

swagger:title: "整個項目的名稱或標志"#定制包掃描路徑。配置包掃描路徑description: "內容系統管理系統對課程相關信息進行管理"base-package: com.xuecheng.contentenabled: trueversion: 1.0.0

4.在啟動類中添加@EnableSwagger2Doc注解

再次啟動服務,工程啟動起來,訪問http://localhost:8800/content/swagger-ui.html查看接口信息,其中8800為項目端口號,localhost代表本機,可根據實際情況修改,后面的信息swagger-ui.html為固定信息.

5.添加接口說明注解

可以方便查看接口說明

并將定義在方法上的@RestMapping修改位對應的@Postmapping等.

添加完注解后可以方便閱讀接口文檔,特別是接口文檔較多的情況下,提高開發效率

 @Api(value = "課程信息編輯接口",tags = "課程信息編輯接口")@RestController
public class CourseBaseInfoController {@ApiOperation("課程查詢接口")@PostMapping("/course/list")public PageResult<CourseBase> list(PageParams pageParams, @RequestBody(required=false) QueryCourseParamsDto queryCourseParams){//....}
}

6.添加模型類中的屬性說明注解

接口文檔中會有關于接口參數的說明,在模型類上也可以添加?注解對模型類中的屬性進行說明,方便對接口文檔的閱讀

public class PageParams {...@ApiModelProperty("當前頁碼")private Long pageNo = 1L;@ApiModelProperty("每頁記錄數默認值")private Long pageSize = 30L;
...
public class QueryCourseParamsDto {//審核狀態@ApiModelProperty("審核狀態")private String auditStatus;//課程名稱@ApiModelProperty("課程名稱")private String courseName;}

7.Swaager的常用注解如下:

在Java類中添加Swagger的注解即可生成Swagger接口,常用Swagger注解如下:

?

?8.測試

使用Swagger可以進行接口的測試。

修改接口內容,添加一些測試代碼

@ApiOperation("課程查詢接口")
@PostMapping("/course/list")
public PageResult<CourseBase> list(PageParams pageParams, @RequestBody(required=false) QueryCourseParamsDto queryCourseParams){CourseBase courseBase = new CourseBase();courseBase.setName("測試名稱");courseBase.setCreateDate(LocalDateTime.now());List<CourseBase> courseBases = new ArrayList();courseBases.add(courseBase);PageResult pageResult = new PageResult<CourseBase>(courseBases,10,1,10);return pageResult;}

9.時間格式轉換

存在一個問題就是LocalDateTime類型的數據轉json后數據格式并不是我們要的年月日時分秒,提供兩種方法:

9.1 使用@JsonFormat注解

先引入對應的依賴

        <!--JsonFormat--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.8.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.8</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency>

不過在springboot-starter-web中有相應的前兩個依賴?

將注解添加到需要轉換時間格式的相應字段上,并在pattern屬性中設置需要的時間格式

    @ApiModelProperty(value = "創建時間")@TableField("create_date")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private LocalDateTime createDate;

?這里解釋一下:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

? ?pattern:是你需要轉換的時間日期的格式

? ?timezone:是時間設置為東八區,避免時間在轉換中有誤差

? 提示:@JsonFormat注解可以在屬性的上方,同樣可以在屬性對應的get方法上,兩種方式沒有區別

完成上面兩步之后,我們用對應的實體類來接收數據庫查詢出來的結果時就完成了時間格式的轉換,再返回給前端時就是一個符合我們設置的時間格式了

@DateTimeFormat的使用和@jsonFormat差不多,首先需要引入是spring還有jodatime依賴

  <!-- joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency>

在controller層我們使用spring mvc 表單自動封裝映射對象時,我們在對應的接收前臺數據的對象的屬性上加@DateTimeFormat?

 @DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date symstarttime;@DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date symendtime;

總結:?

? 注解@JsonFormat主要是后臺到前臺的時間格式的轉換

? 注解@DateTimeFormat?主要是前后到后臺的時間格式的轉換

9.2 通過添加配置文件實現時間格式轉換

因為這個文件可以通用,建議設置在父類工程中,config/LocalDateTimeConfig文件中:

import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;@Configuration
public class LocalDateTimeConfig {/** 序列化內容*   LocalDateTime -> String* 服務端返回給客戶端內容* */@Beanpublic LocalDateTimeSerializer localDateTimeSerializer() {return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}/** 反序列化內容*   String -> LocalDateTime* 客戶端傳入服務端數據* */@Beanpublic LocalDateTimeDeserializer localDateTimeDeserializer() {return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}// 配置@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder -> {builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());};}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67919.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek API文檔解讀(對話模塊)

對話&#xff08;Chat&#xff09; 對話補全 報文message對象數組 System message name 一個在線聊天系統&#xff0c;其中涉及多個用戶和一個系統管理員。在這個系統中&#xff0c;每個用戶都可以發送消息&#xff0c;并且系統管理員可以監控和回復這些消息。為了區分不同…

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.19 線性代數核武器:BLAS/LAPACK深度集成

2.19 線性代數核武器&#xff1a;BLAS/LAPACK深度集成 目錄 #mermaid-svg-yVixkwXWUEZuu02L {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yVixkwXWUEZuu02L .error-icon{fill:#552222;}#mermaid-svg-yVixkwXWUEZ…

Linux——文件與磁盤

1. 磁盤結構 磁盤在我們的計算機中有著重要的地位&#xff0c;當文件沒有被打開時其數據就存儲在磁盤上&#xff0c;要了解磁盤的工作原理先要了解磁盤的結構。 1.1 磁盤的物理結構 以傳統的存儲設備機械硬盤為例&#xff0c;它通過磁性盤片和磁頭來讀寫數據。磁盤內部有多個旋…

【Envi遙感圖像處理】010:歸一化植被指數NDVI計算方法

文章目錄 一、NDVI簡介二、NDVI計算方法1. NDVI工具2. 波段運算三、注意事項1. 計算結果為一片黑2. 計算結果超出范圍一、NDVI簡介 歸一化植被指數,是反映農作物長勢和營養信息的重要參數之一,應用于遙感影像。NDVI是通過植被在近紅外波段(NIR)和紅光波段(R)的反射率差異…

UE虛幻引擎No Google Play Store Key:No OBB found報錯如何處理

UE虛幻引擎No Google Play Store Key&#xff1a;No OBB found報錯如何處理&#xff1f; 問題描述&#xff1a; UE成功打包APK并安裝過后&#xff0c;啟動應用時提示&#xff1a; No Google Play Store KeyNo OBB found and no store key to try to download. Please setone …

C++并發編程指南04

文章目錄 共享數據的問題3.1.1 條件競爭雙鏈表的例子條件競爭示例惡性條件競爭的特點 3.1.2 避免惡性條件競爭1. 使用互斥量保護共享數據結構2. 無鎖編程3. 軟件事務內存&#xff08;STM&#xff09; 總結互斥量與共享數據保護3.2.1 互斥量使用互斥量保護共享數據示例代碼&…

【Redis】主從模式,哨兵,集群

主從復制 單點問題&#xff1a; 在分布式系統中&#xff0c;如果某個服務器程序&#xff0c;只有一個節點&#xff08;也就是一個物理服務器&#xff09;來部署這個服務器程序的話&#xff0c;那么可能會出現以下問題&#xff1a; 1.可用性問題&#xff1a;如果這個機器掛了…

Vue.js 如何選擇合適的組件庫

Vue.js 如何選擇合適的組件庫 大家在開發 Vue.js 項目的時候&#xff0c;都會面臨一個問題&#xff1a;我該選擇哪個組件庫&#xff1f; 市面上有很多優秀的 Vue 組件庫&#xff0c;比如 Element Plus、Vuetify、Quasar 等&#xff0c;它們各有特點。選擇合適的組件庫&#xf…

寒假(一)

請使用消息隊列實現2個終端之間互相聊天 終端一 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h&g…

java項目驗證碼登錄

1.依賴 導入hutool工具包用于創建驗證碼 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.2</version></dependency> 2.測試 生成一個驗證碼圖片&#xff08;生成的圖片瀏覽器可…

4 前端前置技術(中):node.js環境

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言 前言

BUU14 [極客大挑戰 2019]PHP1

用dirsearch掃描文件&#xff0c;掃了一萬年什么也沒掃出來 從網上看的wp&#xff0c;他們掃出來www.zip 這里直接用上了&#xff0c;以后有空再掃一遍 下載www.zip 在index.php中 說明要輸入select 打開class.php <?php include flag.php;error_reporting(0);class…

7-9 乘法口訣數列

本題要求你從任意給定的兩個 1 位數字 a1? 和 a2? 開始&#xff0c;用乘法口訣生成一個數列 {an?}&#xff0c;規則為從 a1? 開始順次進行&#xff0c;每次將當前數字與后面一個數字相乘&#xff0c;將結果貼在數列末尾。如果結果不是 1 位數&#xff0c;則其每一位都應成為…

20250202在Ubuntu22.04下使用Guvcview錄像的時候降噪

20250202在Ubuntu22.04下使用Guvcview錄像的時候降噪 2025/2/2 21:25 聲卡&#xff1a;筆記本電腦的攝像頭自帶的【USB接口的】麥克風。沒有外接3.5mm接口的耳機。 緣起&#xff1a;在安裝Ubuntu18.04/20.04系統的筆記本電腦中直接使用Guvcview錄像的時候底噪很大&#xff01; …

使用React和Material-UI構建TODO應用的前端UI

使用React和Material-UI構建TODO應用的前端UI 引言環境準備代碼解析1. 導入必要的模塊2. 創建React組件3. 定義函數3.1 獲取TODO列表3.2 創建TODO項3.3 更新TODO項3.4 刪除TODO項3.5 處理編輯點擊事件3.6 關閉編輯對話框3.7 保存編輯內容 4. 使用Effect鉤子5. 渲染組件 功能實現…

藍橋杯思維訓練營(三)

文章目錄 題目詳解680.驗證回文串 II30.魔塔游戲徒步旅行中的補給問題觀光景點組合得分問題 題目詳解 680.驗證回文串 II 680.驗證回文串 II 思路分析&#xff1a;這個題目的關鍵就是&#xff0c;按照正常來判斷對應位置是否相等&#xff0c;如果不相等&#xff0c;那么就判…

重生之我在異世界學編程之C語言:深入指針篇(上)

大家好&#xff0c;這里是小編的博客頻道 小編的博客&#xff1a;就愛學編程 很高興在CSDN這個大家庭與大家相識&#xff0c;希望能在這里與大家共同進步&#xff0c;共同收獲更好的自己&#xff01;&#xff01;&#xff01; 本文目錄 引言正文&#xff08;1&#xff09;內置數…

密碼學的數學基礎1-素數和RSA加密

數學公式推導是密碼學的基礎, 故開一個新的課題 – 密碼學的數學基礎系列 素數 / 質數 質數又稱素數。 一個大于1的自然數&#xff0c;除了1和它自身外&#xff0c;不能被其他自然數整除的數叫做質數&#xff1b;否則稱為合數&#xff08;規定1既不是質數也不是合數&#xff0…

kamailio源文件modules.lst的內容解釋

在執行make cfg 后&#xff0c;在kamailio/src目錄下有一個文件modules.lst&#xff0c;內容如下&#xff1a; # this file is autogenerated by make modules-cfg# the list of sub-directories with modules modules_dirs:modules# the list of module groups to compile cf…

音視頻入門基礎:RTP專題(7)——RTP協議簡介

一、引言 本文對RTP協議進行簡介。在簡介之前&#xff0c;請各位先下載RTP的官方文檔《RFC 3550》和《RFC 3551》。《RFC 3550》總共有89頁&#xff0c;《RFC 3551》總共有44頁。本文下面所說的“頁數”是指在pdf閱讀器中顯示的頁數&#xff1a; 二、RTP協議簡介 根據《RFC 35…