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

SpringBoot如何優(yōu)雅的整合Swagger Api自動生成文檔

 更新時間:2021年07月08日 14:38:44   作者:kenx  
在多人協(xié)作的開發(fā)過程中,API文檔不僅可以減少等待,也能保證開發(fā)的持續(xù)進行,這篇文章主要給大家介紹了關(guān)于SpringBoot如何優(yōu)雅的整合Swagger Api自動生成文檔的相關(guān)資料,需要的朋友可以參考下

前言

一個好的可持續(xù)交付的項目,項目說明,和接口文檔是必不可少的,swagger api 就可以幫我們很容易自動生成api 文檔,不需要單獨額外的去寫,無侵入式,方便快捷大大減少前后端的溝通方便查找和測試接口提高團隊的開發(fā)效率方便新人了解項目,剩余的時間就可以去約妹子啦

整合swagger api

這里我們自己去整合swagger api比較麻煩,要導(dǎo)入好幾個包,有大神幫我們寫好了輪子kinfe4j直接對應(yīng)SpringBoot的啟動項,而且在不影響原來使用功能上界面ui做了美化功能做了增強 我們直接整合這個就好了

        <!--api 文檔-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.1</version>
        </dependency>

正如官網(wǎng)所說

kinfe4j官方文檔點擊這里

自定義配置信息

為我們?yōu)閟wagger配置更多的接口說明

package cn.soboys.core.config;

import cn.hutool.core.collection.CollUtil;
import cn.soboys.core.ret.ResultCode;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Response;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 * @author kenx
 * @version 1.0
 * @date 2021/6/21 16:02
 * api 配置類
 */
@Configuration
public class SwaggerConfigure {
    @Resource
    private SwaggerProperty swaggerProperty;

    /**
     * 構(gòu)造api 文檔
     * @return
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30).globalResponses(HttpMethod.POST, this.responseList()) //全局respons信息
                .apiInfo(apiInfo(swaggerProperty))  //文檔信息
                .select()
                //文檔掃描
                //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))  //有ApiOperation注解的controller都加入api文檔
                .apis(RequestHandlerSelectors.basePackage(swaggerProperty.getBasePackage())) //包模式
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo(SwaggerProperty swagger) {
        return new ApiInfoBuilder()
                //標題
                .title(swagger.getTitle())
                //描述
                .description(swagger.getDescription())
                //創(chuàng)建聯(lián)系人信息 (作者,郵箱,網(wǎng)站)
                .contact(new Contact(swagger.getAuthor(), swagger.getUrl(), swagger.getEmail()))
                //版本
                .version(swagger.getVersion())
                //認證
                .license(swagger.getLicense())
                //認證協(xié)議
                .licenseUrl(swagger.getLicenseUrl())
                .build();
    }

    /**
     * 全局response 返回信息
     * @return
     */
    private List<Response> responseList() {
        List<Response> responseList = CollUtil.newArrayList();
        Arrays.stream(ResultCode.values()).forEach(errorEnum -> {
            responseList.add(
                    new ResponseBuilder().code(errorEnum.getCode().toString()).description(errorEnum.getMessage()).build()
            );
        });
        return responseList;
    }
}

抽出api文檔配置模版信息為屬性文件方便復(fù)用

package cn.soboys.core.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;

/**
 * @author kenx
 * @version 1.0
 * @date 2021/6/21 16:01
 * api 文檔信息
 */
@Data
@SpringBootConfiguration
public class SwaggerProperty {
    /**
     * 需要生成api文檔的 類
     */
    @Value("${swagger.basePackage}")
    private String basePackage;
    /**
     * api文檔 標題
     */
    @Value("${swagger.title}")
    private String title;
    /**
     * api文檔 描述
     */
    @Value("${swagger.description}")
    private String description;
    /**
     * api文檔 版本
     */
    @Value("${swagger.version}")
    private String version;
    /**
     * api  文檔作者
     */
    @Value("${swagger.author}")
    private String author;
    /**
     * api 文檔作者網(wǎng)站
     */
    @Value("${swagger.url}")
    private String url;
    /**
     * api文檔作者郵箱
     */
    @Value("${swagger.email}")
    private String email;
    /**
     * api 文檔 認證協(xié)議
     */
    @Value("${swagger.license}")
    private String license;
    /**
     * api 文檔 認證 地址
     */
    @Value("${swagger.licenseUrl}")
    private String licenseUrl;
}

簡單使用

在你的Controller上添加swagger注解

@Slf4j
@Api(tags = "登錄")
public class LoginController {
    private final IUsersService userService;

    @PostMapping("/login")
    @ApiOperation("用戶登錄")
    public String login(@RequestBody UserLoginParams userLoginParams) {
        Users u = userService.login(userLoginParams);
        return "ok";
    }
}

注意如啟用了訪問權(quán)限,還需將swagger相關(guān)uri允許匿名訪問

/swagger**/**
/webjars/**
/v3/**
/doc.html

重啟服務(wù),自帶api文檔訪問鏈接為/doc.html界面如下:

相比較原來界面UI更加漂亮了,信息更完善功能更強大

Swagger常用注解

Api標記

用在請求的類上,表示對類的說明,也代表了這個類是swagger2的資源

參數(shù):

  • tags:說明該類的作用,參數(shù)是個數(shù)組,可以填多個。
  • value="該參數(shù)沒什么意義,在UI界面上不顯示,所以不用配置"
  • description = "用戶基本信息操作"

ApiOperation標記

用于請求的方法上表示一個http請求的操作

參數(shù):

  • value用于方法描述
  • notes用于提示內(nèi)容
  • tags可以重新分組(視情況而用)

ApiParam標記

用于請求方法上對請求參數(shù),字段說明;表示對參數(shù)的添加元數(shù)據(jù)(說明或是否必填等)

參數(shù):

  • name–參數(shù)名
  • value–參數(shù)說明
  • required–是否必填

ApiModel標記

用于java實體類上表示對類進行說明,用于參數(shù)用實體類接收

參數(shù):

  • value–表示對象名
  • description–描述
    都可省略

ApiModelProperty標記

用于方法,字段; 表示對model屬性的說明或者數(shù)據(jù)操作更改

參數(shù):

  1. value–字段說明
  2. name–重寫屬性名字
  3. dataType–重寫屬性類型
  4. required–是否必填
  5. example–舉例說明
  6. hidden–隱藏
@ApiModel(value="user對象",description="用戶對象user")
public class User implements Serializable{
    private static final long serialVersionUID = 1L;
     @ApiModelProperty(value="用戶名",name="username",example="xingguo")
     private String username;
     @ApiModelProperty(value="狀態(tài)",name="state",required=true)
      private Integer state;
      private String password;
      private String nickName;
      private Integer isDeleted;
 
      @ApiModelProperty(value="id數(shù)組",hidden=true)
      private String[] ids;
      private List<String> idList;
     //省略get/set
}

ApiIgnore標記

用于請求類或者方法上,可以不被swagger顯示在頁面上

ApiImplicitParam標記

用于方法表示單獨的請求參數(shù)

ApiImplicitParams標記

用于方法,包含多個 @ApiImplicitParam

參數(shù):

  1. name–參數(shù)名
  2. value–參數(shù)說明
  3. dataType–數(shù)據(jù)類型
  4. paramType–參數(shù)類型
  5. example–舉例說明
  @ApiOperation("查詢測試")
  @GetMapping("select")
  //@ApiImplicitParam(name="name",value="用戶名",dataType="String", paramType = "query")
  @ApiImplicitParams({
  @ApiImplicitParam(name="name",value="用戶名",dataType="string", paramType = "query",example="xingguo"),
  @ApiImplicitParam(name="id",value="用戶id",dataType="long", paramType = "query")})
  public void select(){
 
  }

總結(jié)

  • 可以給實體類和接口添加注釋信息
  • 接口文檔實時更新
  • 在線測試
  • kinfe4j 在swagger API只做增強,不會改變原有任何使用,更多增加使用功能

點擊這里進入kinfe4j官網(wǎng)文檔

到此這篇關(guān)于SpringBoot如何優(yōu)雅的整合Swagger Api自動生成文檔的文章就介紹到這了,更多相關(guān)SpringBoot整合Swagger Api內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計模式以虹貓藍兔的故事講解橋接模式

    Java設(shè)計模式以虹貓藍兔的故事講解橋接模式

    橋接是用于把抽象化與實現(xiàn)化解耦,使二者可以獨立變化。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它通過提供抽象化和實現(xiàn)化之間的橋接結(jié)構(gòu),來實現(xiàn)二者的解耦。這種模式涉及到一個作為橋接的接口,使得實體類的功能獨立于接口實現(xiàn)類。這兩種類型的類可被結(jié)構(gòu)化改變而互不影響
    2022-04-04
  • Java中Objects.equals踩坑記錄

    Java中Objects.equals踩坑記錄

    最近在工作中發(fā)現(xiàn)一個問題,覺著還是挺有必要記錄下的,這篇文章主要給大家介紹了關(guān)于Java中Objects.equals踩坑的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Idea配置熱部署的詳細教程

    Idea配置熱部署的詳細教程

    這篇文章主要介紹了Idea配置熱部署的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java容器源碼LinkedList原理解析

    Java容器源碼LinkedList原理解析

    這篇文章主要介紹了Java容器源碼LinkedList原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作

    Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作

    這篇文章主要介紹了Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • SpringBoot JdbcTemplate批量操作的示例代碼

    SpringBoot JdbcTemplate批量操作的示例代碼

    本篇文章主要介紹了SpringBoot JdbcTemplate批量操作的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Mybatis-plus分頁查詢不生效問題排查全過程

    Mybatis-plus分頁查詢不生效問題排查全過程

    最近寫分頁的時候,遇到了分頁無法正常發(fā)揮作用的問題,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus分頁查詢不生效問題排查的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • 一篇文章帶你學(xué)習(xí)Mybatis-Plus(新手入門)

    一篇文章帶你學(xué)習(xí)Mybatis-Plus(新手入門)

    這篇文章主要介紹了MyBatis-Plus 快速入門案例(小白教程),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java實現(xiàn)字符串like和not?like的使用示例

    java實現(xiàn)字符串like和not?like的使用示例

    在Java中,我們經(jīng)常需要對字符串進行模式匹配操作,字符串的模式匹配通常使用like和not?like這兩個運算符進行,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)

    java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)

    這篇文章主要介紹了java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)的相關(guān)資料,這里提供了兩種在file尾部添加數(shù)據(jù)的方法,希望能幫助到大家,需要的朋友可以參考下
    2017-09-09

最新評論

湘乡市| 桦南县| 太仆寺旗| 甘泉县| 泽库县| 泗洪县| 泰和县| 宁化县| 郸城县| 凤城市| 特克斯县| 曲靖市| 韶关市| 梨树县| 揭东县| 和林格尔县| 海原县| 睢宁县| 万年县| 三亚市| 香港| 金平| 鄂伦春自治旗| 伊川县| 庆阳市| 河西区| 安吉县| 郁南县| 泰州市| 石城县| 蒙城县| 瑞金市| 彝良县| 白朗县| 桂林市| 湘乡市| 平泉县| 公主岭市| 平昌县| 荆门市| 武山县|