1. 程式人生 > >SpringBoot結合swagger自動生成API文件

SpringBoot結合swagger自動生成API文件

        Web開發常採用前後端分離的方式。前後端通過API進行互動,在Swagger UI中,前後端人員能夠直觀預覽並且測試API,方便前後端人員同步開發。

        在SpringBoot中整合swagger,步驟如下:

        1.將下面的依賴新增到Maven專案的pom.xml檔案中。springfox-swagger2元件幫助我們自動生成描述API的json檔案,而springfox-swagger-ui元件就是將這個json檔案解析出來,用一種更友好的方式呈現出來。

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

        2.新增Swaager的配置類

package com.example.demo.config;

import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableSwagger2
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket swaggerSpringMvcPlugin() {
        return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();
    }

}

      3.在需要暴露的API上新增需要在Swagger UI頁面上顯示的應用相關的介紹資訊。舉個例子吧~

在Controller類上新增@API註解,說明該類的作用;該類下包含增刪改查五個方法,給大家一個全面的示範,至於service、dao層的實現,留給大家自己發揮吧~主要是在方法上新增@ApiOperation,@ApiImplicitParam註解,作用是對方法以及引數的說明。

package com.example.demo.controller;

import com.example.demo.service.AreaService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.demo.entity.Area;
import java.util.*;

@Api(description = "AreaController相關的api")
@RestController
@RequestMapping("/superadmin")
public class AreaController {
    @Autowired
    private AreaService areaService;
    @ApiOperation(value="查詢區域資訊" ,notes = "查詢資料庫中所有區域資訊")
    @RequestMapping(value="/listarea" , method = RequestMethod.GET)
    private Map<String,Object> listArea(){
        Map<String,Object> modelMap = new HashMap<String, Object>() ;
        List<Area> list = areaService.getAreaList();
        modelMap.put("areaList" , list);
        return modelMap;
    }

        @ApiOperation(value="根據id查詢區域資訊" ,notes = "查詢資料庫中某個區域資訊")
        @ApiImplicitParam(name="areaId",value="區域ID",paramType="query",required = true,dataType = "int")
        @RequestMapping(value="/getareabyid" ,method = RequestMethod.GET)
        private Map<String,Object> getAreaById(@RequestParam("areaId") Integer areaId){
            Map<String,Object> modelMap = new HashMap<String, Object>() ;
            Area area = areaService.getAreaById(areaId);
        modelMap.put("areaList" , area);
        return modelMap;
    }
    @ApiOperation(value="新增區域資訊",notes="根據Area物件新增區域資訊")
    @ApiImplicitParam(name="area",value="區域資訊",required=true,dataType="Area")
    @RequestMapping(value="/addarea" ,method = RequestMethod.POST)
    private Map<String,Object> addArea(@RequestBody Area area){
        Map<String,Object> modelMap = new HashMap<String, Object>() ;
        modelMap.put("success" ,areaService.addArea(area));
        return modelMap;
    }
    @ApiOperation(value="修改區域資訊",notes="根據Area物件修改區域資訊")
    @ApiImplicitParam(name="area",value="區域資訊",required=true,dataType="Area")
    @RequestMapping(value="/modifyarea" ,method = RequestMethod.POST)
    private Map<String,Object> modifyArea(@RequestBody Area area){
        Map<String,Object> modelMap = new HashMap<String, Object>() ;
        modelMap.put("success" ,areaService.modifyArea(area));
        return modelMap;
    }
    @ApiOperation(value="刪除區域資訊",notes="根據區域ID刪除區域資訊")
    @ApiImplicitParam(name="areaId",value="區域ID",required=true,dataType="int")
    @RequestMapping(value="/removearea" ,method = RequestMethod.GET)
    private Map<String,Object> removeArea(@RequestParam("areaId") Integer areaId){
        Map<String,Object> modelMap = new HashMap<String, Object>() ;
        modelMap.put("success",areaService.deleteArea(areaId));
        return modelMap;
    }
}

        4.啟動SpringBoot專案,訪問http://localhost:8080/demo/swagger-ui.html頁面,注意了,我這裡是因為在application.properties配置了專案路徑server.servlet.context-path=/demo,所以才在上面的url加上/demo,一般若無特殊的配置,直接訪問http://localhost:8080/swagger-ui.html即可。

        Swagger UI介面絕對有顏有值!畫面小清新,而且API非常直觀。點選頁面上的url,可檢視API文件api-docs,不僅如此,咱們是可以測試介面的喲~簡單測個 根據id查詢區域資訊 的介面吧,點選將其展開。

        點選 Try it out ,咱們得輸個int型別的區域ID做引數,輸入完後點擊execute後就可以看到結果啦!

 

        遲到兩年的swagger,算是正式認識了。

日ji