最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot整合Swagger2的完整步驟詳解

 更新時間:2018年07月10日 14:55:15   作者:苦水潤喉  
這篇文章主要給大家介紹了關于Spring Boot整合Swagger2的完整步驟,文中通過示例代碼將整合的步驟一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

swagger,中文“拽”的意思。它是一個功能強大的api框架,它的集成非常簡單,不僅提供了在線文檔的查閱,
而且還提供了在線文檔的測試。另外swagger很容易構建restful風格的api。

一、Swagger概述

Swagger是一組圍繞OpenAPI規(guī)范構建的開源工具,可幫助設計、構建、記錄和使用REST API。

簡單說下,它的出現(xiàn)就是為了方便進行測試后臺的restful形式的接口,實現(xiàn)動態(tài)的更新,當我們在后臺的接口

修改了后,swagger可以實現(xiàn)自動的更新,而不需要認為的維護這個接口進行測試。

二、Swagger常用注解

swagger通過注解表明該接口會生成文檔,包括接口名、請求方法、參數(shù)、返回信息的等等。

  • @Api:修飾整個類,描述Controller的作用
  • @ApiOperation:描述一個類的一個方法,或者說一個接口
  • @ApiParam:單個參數(shù)描述
  • @ApiModel:用對象來接收參數(shù)
  • @ApiProperty:用對象接收參數(shù)時,描述對象的一個字段
  • @ApiResponse:HTTP響應其中1個描述
  • @ApiResponses:HTTP響應整體描述
  • @ApiIgnore:使用該注解忽略這個API
  • @ApiError :發(fā)生錯誤返回的信息
  • @ApiParamImplicitL:一個請求參數(shù)
  • @ApiParamsImplicit 多個請求參數(shù)

三、SpringBoot整合Swagger

3.1 添加依賴

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

3.2 添加SwaggerConfiguration

通過@Configuration注解,表明它是一個配置類,@EnableSwagger2開啟swagger2。

apiINfo()配置一些基本的信息。apis()指定掃描的包會生成文檔。

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

package com.lance.learn.springbootswagger.configuration;

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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @author lance(ZYH)
 * @function Swagger啟動配置類
 * @date 2018-07-09 21:24
 */
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

 /**
  * swagger2的配置文件,這里可以配置swagger2的一些基本的內容,比如掃描的包等等
  * @return
  */
 @Bean
 public Docket createRestfulApi(){
  return new Docket(DocumentationType.SWAGGER_2)
    .pathMapping("/")
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.lance.learn.springbootswagger.controller")) //暴露接口地址的包路徑
    .paths(PathSelectors.any())
    .build();
 }

 /**
  * 構建 api文檔的詳細信息函數(shù),注意這里的注解引用的是哪個
  * @return
  */
 private ApiInfo apiInfo(){
  return new ApiInfoBuilder()
    //頁面標題
    .title("Spring Boot 測試使用 Swagger2 構建RESTful API")
    //創(chuàng)建人
    .contact(new Contact("LanveToBigData", "http://www.cnblogs.com/zhangyinhua/", "917484312@qq.com"))
    //版本號
    .version("1.0")
    //描述
    .description("API 描述")
    .build();
 }
}

3.3 Controller文檔內容

描述主要來源于函數(shù)等命名產(chǎn)生,對用戶并不友好,我們通常需要自己增加一些說明來豐富文檔內容。

如下所示,我們通過@ApiOperation注解來給API增加說明、通過@ApiImplicitParams、@ApiImplicitParam
注解來給參數(shù)增加說明。

1)實例一

package com.lance.learn.springbootswagger.controller;

import com.lance.learn.springbootswagger.bean.Book;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

import java.util.*;

/**
 * @author lance(ZYH)
 * @function
 * @date 2018-07-09 21:39
 */
@RestController
@RequestMapping(value = "/bookcurd")
public class BookController {
 Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, Book>());

 @ApiOperation(value="獲取圖書列表", notes="獲取圖書列表")
 @RequestMapping(value={""}, method= RequestMethod.GET)
 public List<Book> getBook() {
  List<Book> book = new ArrayList<>(books.values());
  return book;
 }

 @ApiOperation(value="創(chuàng)建圖書", notes="創(chuàng)建圖書")
 @ApiImplicitParam(name = "book", value = "圖書詳細實體", required = true, dataType = "Book")
 @RequestMapping(value="", method=RequestMethod.POST)
 public String postBook(@RequestBody Book book) {
  books.put(book.getId(), book);
  return "success";
 }
 @ApiOperation(value="獲圖書細信息", notes="根據(jù)url的id來獲取詳細信息")
 @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path")
 @RequestMapping(value="/{id}", method=RequestMethod.GET)
 public Book getBook(@PathVariable Long id) {
  return books.get(id);
 }

 @ApiOperation(value="更新信息", notes="根據(jù)url的id來指定更新圖書信息")
 @ApiImplicitParams({
   @ApiImplicitParam(name = "id", value = "圖書ID", required = true, dataType = "Long",paramType = "path"),
   @ApiImplicitParam(name = "book", value = "圖書實體book", required = true, dataType = "Book")
 })
 @RequestMapping(value="/{id}", method= RequestMethod.PUT)
 public String putUser(@PathVariable Long id, @RequestBody Book book) {
  Book book1 = books.get(id);
  book1.setName(book.getName());
  book1.setPrice(book.getPrice());
  books.put(id, book1);
  return "success";
 }
 @ApiOperation(value="刪除圖書", notes="根據(jù)url的id來指定刪除圖書")
 @ApiImplicitParam(name = "id", value = "圖書ID", required = true, dataType = "Long",paramType = "path")
 @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
 public String deleteUser(@PathVariable Long id) {
  books.remove(id);
  return "success";
 }

 @ApiIgnore//使用該注解忽略這個API
 @RequestMapping(value = "/hi", method = RequestMethod.GET)
 public String jsonTest() {
  return " hi you!";
 }
}

2)實例二

package com.lance.learn.springbootswagger.controller;

import com.lance.learn.springbootswagger.bean.User;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.util.*;

/**
 * @author lance(ZYH)
 * @function
 * @date 2018-07-09 22:00
 */

@RestController
@RequestMapping(value="/users")
public class UserDetailController {
  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 = new User();
    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";
  }
}

3.4 web界面查看

四、項目代碼地址

https://github.com/LanceToBigData/SpringBootLearning/tree/develop/SpringBoot-Swagger

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • java泛型基本知識和通用方法

    java泛型基本知識和通用方法

    這篇文章主要介紹了java泛型基礎知識及通用方法,從以下幾個方面介紹一下java的泛型: 基礎, 泛型關鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2021-06-06
  • JavaAgent實現(xiàn)http接口發(fā)布方式淺析

    JavaAgent實現(xiàn)http接口發(fā)布方式淺析

    這篇文章主要介紹了JavaAgent實現(xiàn)http接口發(fā)布方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • 詳解SpringBoot中自定義和配置攔截器的方法

    詳解SpringBoot中自定義和配置攔截器的方法

    今天這篇文章來介紹一下攔截器在SpringBoot中的如何自定義及如何配置的,攔截器的具體作用和應用場景,感興趣的小伙伴可以了解一下
    2022-05-05
  • java仿QQ微信聊天室功能的實現(xiàn)

    java仿QQ微信聊天室功能的實現(xiàn)

    這篇文章主要介紹了java仿QQ微信聊天室的實現(xiàn)代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,,需要的朋友可以參考下
    2021-04-04
  • Java中的Cursor使用詳解

    Java中的Cursor使用詳解

    本文介紹了Java中的Cursor接口及其在大數(shù)據(jù)集處理中的優(yōu)勢,包括逐行讀取、分頁處理、流控制、動態(tài)改變查詢、并發(fā)控制和減少網(wǎng)絡流量等,感興趣的朋友一起看看吧
    2025-02-02
  • java的arraylist排序示例(arraylist用法)

    java的arraylist排序示例(arraylist用法)

    這篇文章主要介紹了java的arraylist排序示例,學習一下arraylist的用法,需要的朋友可以參考下
    2014-03-03
  • java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

    java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

    這篇文章主要介紹了java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • Spring Boot 整合 ShedLock 處理定時任務重復執(zhí)行的問題小結

    Spring Boot 整合 ShedLock 處理定時任務重復執(zhí)行的問題小結

    ShedLock是解決分布式系統(tǒng)中定時任務重復執(zhí)行問題的Java庫,通過在數(shù)據(jù)庫中加鎖,確保只有一個節(jié)點在指定時間執(zhí)行任務,它與SpringScheduler、Quartz等框架結合使用,本文介紹Spring Boot 整合 ShedLock 處理定時任務重復執(zhí)行的問題,感興趣的朋友一起看看吧
    2025-02-02
  • 快速解決code唯一碼(java)的簡便方法

    快速解決code唯一碼(java)的簡便方法

    下面小編就為大家?guī)硪黄焖俳鉀Qcode唯一碼(java)的簡便方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring?invokeBeanFactoryPostProcessors方法刨析源碼

    Spring?invokeBeanFactoryPostProcessors方法刨析源碼

    invokeBeanFactoryPostProcessors該方法會實例化所有BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的實例并且執(zhí)行postProcessBeanFactory與postProcessBeanDefinitionRegistry方法
    2023-01-01

最新評論

平定县| 四平市| 南乐县| 蕲春县| 磴口县| 博湖县| 嘉义县| 天全县| 高要市| 仁怀市| 邮箱| 星座| 广安市| 安化县| 敖汉旗| 万州区| 吉林省| 西和县| 丁青县| 玉环县| 瑞丽市| 巢湖市| 榕江县| 额尔古纳市| 永和县| 阳信县| 龙岩市| 阳山县| 长武县| 吉木萨尔县| 英德市| 仪陇县| 金川县| 南开区| 额济纳旗| 大渡口区| 鹤庆县| 高陵县| 芒康县| 自贡市| 临澧县|