Springboot 整合 swagger

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_40254498/article/details/83622098

swagger

主要是為后端服務的接口文檔,懶人必備,swagger就是一款讓你更好的書寫API文檔的框架。
其他的框架有阿里爸爸推出 Rap ,感興趣的可以自己了解一下。
本文主要基于springboot,要先了解下springboot;

開始

Maven

本項目基于maven
springboot pom 中添加

  <!-- swagger --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.5.0</version></dependency><!-- swagger-ui --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.5.0</version></dependency><dependency><groupId>io.github.swagger2markup</groupId><artifactId>swagger2markup-spring-restdocs-ext</artifactId><version>2.5.0</version><scope>test</scope></dependency>

啟動

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author Dwxqnswxl*/
@EnableAutoConfiguration
@SpringBootApplication(scanBasePackages = "com.example")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

配置

import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;/*** Description** @Author : huangjinxing* @Email : hmm7023@gmail.com* @Date : 2018/10/24 11:10* @Version :*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket swaggerSpringMvcPlugin() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();}@Beanpublic ApiInfo apiInfo() {return new ApiInfoBuilder().title("接口列表 v1.1.0").description("接口測試").termsOfServiceUrl("http://localhost:8080/").contact(new Contact("HUANGJINXING","www.dwxqnswxl.cn","hmm7023@gmail.com")).version("1.1.0").build();}}

Controller

package com.example.controller;import com.example.bean.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;import java.util.HashMap;
import java.util.Map;/*** Description** @Author : huangjinxing* @Email : hmm7023@gmail.com* @Date : 2018/10/24 11:12* @Version :*/
@Api()
@RestController
@RequestMapping("/demoController")
public class DemoController {private static final Logger log = LoggerFactory.getLogger(DemoController.class);public static final String RET_CODE = "retCode";public static final String RET_MSG = "retMsgo";@ApiOperation(value = "新增用戶", notes = "新增注冊")@PostMapping(value = "/createUser", consumes = MediaType.APPLICATION_JSON_VALUE)public DeferredResult createUser(@RequestBody User user) {log.info("createUser:::" , user.toString());DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "新增成功.");deferredResult.setResult(map);return deferredResult;}@ApiOperation(value = "修改用戶", notes = "修改用戶")@PostMapping(value = "/updateUser", consumes = MediaType.APPLICATION_JSON_VALUE)public DeferredResult updateUser(@RequestBody User user) {log.info("updateUser:::" , user.toString());DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "修改成功.");deferredResult.setResult(map);return deferredResult;}@ApiOperation(value = "刪除用戶", notes = "刪除用戶")@ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用戶標識", required = true, paramType = "query", dataType = "String")})@DeleteMapping(value = "/deleteUser")public DeferredResult deleteUser(@RequestParam("userId") String userId) {log.info("deleteUser:::" , userId);DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "刪除成功.");deferredResult.setResult(map);return deferredResult;}@ApiOperation(value = "查詢用戶", notes = "查詢用戶")@ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用戶標識", required = true, paramType = "query", dataType = "String")})@GetMapping(value = "/queryUser")public DeferredResult queryUser(@RequestParam("userId") String userId) {log.info("queryUser:::" , userId);DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "查詢成功.");map.put("username", "張三.");map.put("password", "123456");deferredResult.setResult(map);return deferredResult;}
}

User類

package com.example.bean;/*** Description** @Author : huangjinxing* @Email : hmm7023@gmail.com* @Date : 2018/10/24 11:16* @Version :*/
public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

啟動

登陸 http://localhost:8080/swagger-ui.html#/
就可以看到有UI的 接口 
swagger的功能不止如此。

效果

index
接口描述
接口測試返回

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

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

相關文章

Project為項目設置預算

假設項目預算10萬元&#xff0c;如果項目完成后&#xff0c;花費沒有超過10萬元&#xff0c;則成本管理是成功的&#xff0c;如果花費了11萬&#xff0c;則超過了預算。 預算是10萬&#xff0c;一般目標成本設得比預算成本低&#xff0c;比如9.5萬。在項目實施過程中&#xff…

activiti7流程設計器_變頻空調器通信電路

通信電路由室內機和室外機主板兩個部分單元電路組成&#xff0c;并且在實際維修中該電路的故障率比較高&#xff0c;因此單設--節進行詳細說明。第三章變頻空調器單元電路對比和通信電路第二節通信電路通信電路由室內機和室外機主板兩個部分單元電路組成&#xff0c;并且在實際…

PyCharm 中為 Python 項目添加.gitignore文件

文章目錄 1.安裝.ignore插件 2.在項目中添加.ignore文件 1.安裝.ignore插件 在pycharm編譯器中&#xff0c;依次點擊File->Setting 在跳出Setting的頁面中&#xff0c;執行如下操作&#xff1a; 點擊左側的Plugins&#xff0c; 在搜索框中輸入.ignore 點擊右側的install 點…

mysql的分頁查詢

為什么80%的碼農都做不了架構師&#xff1f;>>> order by case when 的用法&#xff08;實現特殊情況的排序&#xff0c;如leader1的排最前面&#xff09;&#xff1a; select * from m_worker_project order by CASE WHEN leader 1 THEN 100 ELSE 1000 END 項目中…

.describe() python_python的apply應用:一般性的“拆分-應用-合并”,附加詳細講解

跟aggregate一樣&#xff0c;transform也是一個有著嚴格條件的特殊函數&#xff1a;傳入的函數只能產生兩種結果&#xff0c;要么產生一個可以傳播的標量值(如np.mean)&#xff0c;要么產生一個相同大小的結果數組。最一般化的GroupBy方法是apply&#xff0c;apply會將待處理的…

DNS服務(4)Slave DNS及高級特性

為了簡化運維人員的負擔&#xff0c;使用Master/Slave DNS架構的情況比較好&#xff0c;現在我們來簡單敘述一下Master/Slaver DNS的特點主DNS服務器&#xff1a;維護所負責解析的域內解析庫服務器&#xff1b;解析庫由管理員維護&#xff1b;從DNS服務器:從主DNS服務器或其它的…

python運算符_Python運算符總結

建議&#xff1a;字符串拼接操作盡量多用join&#xff0c;而減少用”“ join操作時會先計算字符操作所用到的空間總和大小&#xff0c;然后申請內存。然后進行字符串連接操作。所以join的時間復雜的近似O(n)。 操作符連接操作符時&#xff0c;由于字符串是不可變對象&#xff0…

jupyter notebook常用快捷鍵

Jupyter Notebook 有兩種鍵盤輸入模式。編輯模式&#xff0c;允許你往單元中鍵入代碼或文本&#xff1b;這時的單元框線是綠色的。命令模式&#xff0c;鍵盤輸入運行程序命令&#xff1b;這時的單元框線是灰色。 命令模式 (按鍵 Esc 開啟) Enter : 轉入編輯模式Shift-Enter : …

Eclipse安裝試用Hanlp

【1】確定正確安裝配置Java和Eclipse 【2】下載HanLp的各種東西 hanlp.linrunsoft.com/services.ht… 下載這四個文件到本地&#xff0c;我是放在桌面的一個文件夾了。【3】 把jar包導入到Eclipse 在Eclipse先新建一個項目File——New——Java Project--[名字&#xff1a;Hanlp…

升級pip最新版本

python很多庫對pip版本有要求&#xff0c;升級命令為&#xff1a; python -m pip install --upgrade pip windows在cmd下&#xff0c;輸入以上命令

bat 存儲過程返回值_使用Mybatis過程中遇到的坑

常規SSM框架開發中&#xff0c;mybatis遇到的坑是最多的&#xff0c;把以下幾點坑記錄下來防止以后再遇到同樣的情況。1、mybatis 若果在mapper中返回值沒有配置resultMap而是使用resultType直接返回的話&#xff0c;那么當心默認配置中的駝峰匹配規則&#xff0c;參考以下配置…

【洛谷 P2513】 [HAOI2009]逆序對數列(DP)

題目鏈接 這種求方案數的題一般都是\(dp\)吧。 注意到范圍里\(k\)和\(n\)的范圍一樣大&#xff0c;\(k\)是完全可以更大的&#xff0c;到\(n\)的平方級別&#xff0c;所以這暗示了我們要把\(k\)寫到狀態里。\(f[i][j]\)表示前\(1\)~\(i\)的排列逆序對數為\(j\)的方案數。 現在考…

think python下載 中文版開源!這或許是最經典的編程教材

《Think Python》是很多Python初學者的不二入門教材&#xff0c;受到廣泛好評。該書原作者是美國Olin工程學院的教授Allen B. Downey&#xff0c;目前該書的原版和中文版本都已免費開源。 中文版本譯者是一名自學Python的編程愛好者。選擇翻譯《Think Python》&#xff0c;一是…

datatable的數據進行組內排序_排序算法學習分享(四)希爾排序

排序&#xff0c;也稱為排序算法&#xff0c;可以說是我們學習算法的過程中遇到的第一個門檻&#xff0c;也是實際應用中使用得較為頻繁的算法&#xff0c;我將自己對所學的排序算法進行一個歸納總結與分享&#xff0c;如有錯誤&#xff0c;歡迎指正&#xff01;排序算法學習分…

jupyter notebook 安裝代碼提示功能

效果 安裝成功后&#xff0c;輸入部分代碼&#xff0c;按 tab 鍵&#xff0c;會提示代碼 安裝步驟 1.安裝nbextensions 從國內的pip鏡像下載快 pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com jupyter_contrib_nbextensions jupyter contr…

轉:EL表達式的11個內置對象

原文地址&#xff1a;https://blog.csdn.net/qq_17045385/article/details/54799998 EL是JSP內置的表達式語言 JSP2.0開始&#xff0c;不讓再使用Java腳本&#xff0c;而是使用EL表達式和動態標簽來代替Java腳本 ############EL替代的是<%... %>&#xff0c;也就是說EL只…

python需要配置環境變量嗎_python為什么會環境變量設置不成功

學習python編程&#xff0c;首先要配置好環境變量。本文主要講解python的環境變量配置&#xff0c;在不同版本下如何安裝 Windows 打開Python官方下載網站 https://www.python.org/downloads/release/python-370/ x86:表示是32位電腦 x86-64:表示是64位電腦 目前Python版本分為…

一維數組、二維數組、三維數組、四維數組、多維數組的理解

以圖書館來舉例 一維數組是一條線 二維數組是一頁紙 三維數組是一本書 四維數組是書架 五維數組是圖書室2201&#xff08;好幾個書架&#xff09; 六維數組是圖書館某一層&#xff0c;2樓/3樓&#xff0c;好幾個圖書室 七維數組是整個圖書館 第N維數組是宇宙..................…

線性篩

我就是我&#xff0c;一輩子都學不會線性篩的菜雞 一篇非常好的博客轉載于:https://www.cnblogs.com/yzxverygood/p/9907281.html

在資源使用狀況視圖中查看資源的負荷情況

只有工時類資源才會出現過度分配&#xff0c;因為工時類資源通常指組織內部的人力資源或者機械設備等&#xff0c;這些資源通常都有數量上的瓶頸&#xff0c;也只有工時類資源才會在【資源工作表】中設置它的最大單位和資源可用性&#xff0c;這就限制了它在不同時間段內的可用…