【六褘-Swagger】SpringBoot集成Swagger(它是一套基於OpenAPI規範構建的開源工具,可以幫助我們設計、構建、記錄以及使用Rest API)案例篇

Swagger優勢:給我們提供了一個全新的維護API文檔的方式

 

 

一、創建springboot工程

       可以通過Spring Initializr頁面生成一個空的Spring Boot項目,當然也可以下載springboot-pom.xml文件,然後使用Maven構建一個Spring Boot項目。項目創建完成後,爲了方便後面代碼的編寫您可以將其導入到您喜歡的IDE中,使用工具Intelli IDEA打開 

 

二、依賴pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.xiaolonghong</groupId>
    <artifactId>Swaggerdemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>Swaggerdemo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

三、編寫接口

1.創建三個包:cn.xiaolonghong.sbswagger.controller、cn.xiaolonghong.sbswagger.testcontroller、cn.xiaolonghong.sbswagger.model

2.在controller新建UserController.java類,testcontroller包下新建TestController.java類,在model包新建User.java類

UserController.java

註明L:提供用戶的增、刪、查、改、四個接口

package cn.xiaolonghong.sbswagger.controller;

import cn.xiaolonghong.sbswagger.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

/**
   1. 瀏覽器訪問swagger-ui效果: http://localhost:8080/swagger-ui.html
   2. 在Spring Boot項目中集成了Swagger2,啓動項目後,
      我們可以通過在瀏覽器中訪問  http://localhost:8080/v2/api-docs 來驗證,
      你會發現返回的結果是一段JSON串,可讀性非常差。



    @ApiIgnore: Swagger文檔不會顯示擁有該註解的接口。
    @ApiImplicitParams: 用於描述接口的非對象參數集。
    @ApiImplicitParam: 用於描述接口的非對象參數,一般與@ApiImplicitParams組合使用。
    @ApiOperation: 可設置對接口的描述。
    註解屬性	類型	描述
    value	String	接口說明。
    notes	String	接口發佈說明。
    tags	Stirng[]	標籤。
    response	Class<?>	接口返回類型。
    httpMethod	String	接口請求方式。

     註解屬性	描述
     paramType	查詢參數類型,實際上就是參數放在那裏。取值: path:以地址的形式提交數據,根據id查詢用戶的接口就是這種形式傳參。 query:Query string的方式傳參。 header:以流的形式提交。 form:以Form表單的形式提交。
     dataType	參數的數據類型。取值:Long,String
     name	參數名字。
     value	參數意義的描述。
     required	是否必填。取值:true:必填參數,false:非必填參數。


   註明:springboot-集成swagger教程及配置: https://itweknow.cn/blog-site/posts/2111459879.html
 */
@RestController
@RequestMapping("/user")
@Api(tags = "用戶相關接口", description = "提供用戶相關的Rest API")
public class UserController {




    @ApiOperation("更新用戶信息接口")
    @PutMapping("/update")
    public boolean update(@RequestBody User user) {
        return true;
    }

    @ApiOperation("刪除用戶接口")
    @DeleteMapping("/delete/{id}")
    @ApiIgnore
    public boolean delete(@PathVariable("id") int id) {
        return true;
    }

    @ApiOperation("新增用戶接口")
    @PostMapping("add")
    public boolean addUser(@RequestBody User user){
        return false;
    }

    @ApiOperation("通過id查找用戶接口")
    @GetMapping("/find/{id}")
    public User findById(@PathVariable("id") int id) {
        return new User();
    }
}

TestController.java

註明:提供一個測試接口

package cn.xiaolonghong.sbswagger.testcontroller;

import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 提供一個測試接口
 */
@RestController
@RequestMapping("test")
@Api(tags = "測試相關接口", description = "提供測試相關的Rest API")
public class TestController {

    @GetMapping("/test")
    public void test(){
        System.out.println("test");
    }
}

User.java

package cn.xiaolonghong.sbswagger.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/*
  接口相關注解
  @ApiModel: 可設置接口相關實體的描述。
  @ApiModelProperty: 可設置實體屬性的相關描述。
    註解屬性	        類型	  描述
     value	            String	  字段說明。
     name	            String	  重寫字段名稱。
     dataType	        Stirng	  重寫字段類型。
     required	        boolean	  是否必填。
     example	        Stirng	  舉例說明。
     hidden	            boolean	  是否在文檔中隱藏該字段。
     allowEmptyValue    boolean	  是否允許爲空。
     allowableValues	String	  該字段允許的值,當我們API的某個參數爲枚舉類型時,使用這個屬性就可以清楚地告訴API使用者該參數所能允許傳入的值。
 */

@ApiModel("用戶實體")
public class User {
        /**
         * 用戶Id
         */
        @ApiModelProperty("用戶id")
        private int id;

        /**
         * 用戶名
         */
        @ApiModelProperty("用戶姓名")
        private String name;


        /**
         * 用戶地址
         */
        @ApiModelProperty("用戶地址")
        private String address;

        public int getId() {
            return id;
        }

        public User setId(int id) {
            this.id = id;
            return this;
        }

        public String getName() {
            return name;
        }

        public User setName(String name) {
            this.name = name;
            return this;
        }

        public String getAddress() {
            return address;
        }

        public User setAddress(String address) {
            this.address = address;
            return this;
        }
    }

 

四、自定義響應信息

在config包下新建SwaggerConfig.java

package cn.xiaolonghong.sbswagger.config;

import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMethod;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.schema.ModelRef;
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;

import java.util.Collections;

import static com.google.common.collect.Lists.newArrayList;

/**
 * @Configuration 告訴Spring Boot需要加載這個配置類
 * @EnableSwagger2   啓用Swagger2,如果沒加的話自然而然也就看不到後面的驗證效果
 */

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("cn.xiaolonghong.sbswagger.controller"))
                .paths(Predicates.or(PathSelectors.ant("/user/add"),
                        PathSelectors.ant("/user/find/*")))
                .build()
                .apiInfo(apiInfo())
                .useDefaultResponseMessages(false)
                .globalResponseMessage(RequestMethod.GET, newArrayList(
                        new ResponseMessageBuilder()
                                .code(500)
                                .message("服務器發生異常")
                                .responseModel(new ModelRef("Error"))
                                .build(),
                        new ResponseMessageBuilder()
                                .code(403)
                                .message("資源不可用")
                                .build()
                ));
    }

    private ApiInfo apiInfo() {
        return new ApiInfo(
                "Spring Boot項目集成Swagger實例文檔",
                "我的CSDN博客網站:https://blog.csdn.net/qq_41086359,歡迎大家訪問。",
                "API V1.0",
                "Luyi of service",
                new Contact("lIUYI", "https://blog.csdn.net/qq_41086359", "[email protected]"),
                "Apache", "http://www.apache.org/", Collections.emptyList());
    }
}

 

 五、編寫一個啓動類

App.java

package cn.xiaolonghong.sbswagger;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

 

六、瀏覽器訪問

1. 瀏覽器訪問swagger-ui效果: http://localhost:8080/swagger-ui.html

2. 在Spring Boot項目中集成了Swagger2,啓動項目後,
   我們可以通過在瀏覽器中訪問  http://localhost:8080/v2/api-docs 來驗證,
   你會發現返回的結果是一段JSON串,可讀性非常差。

 效果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章