1. 程式人生 > >springboot利用swagger2.0構建api文件

springboot利用swagger2.0構建api文件

樣例:
在這裡插入圖片描述

  1. pom.xml新增依賴
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.7.0</version>
		</dependency>

		<!-- 介面API生成html文件 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.6.1</version>
		</dependency>
  1. 建立類Swagger2
    與啟動類Application同級
    在這裡插入圖片描述
package com.rmw.crawler.manage;

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

/**

 * @Description:    springboot利用swagger構建api文件

 * @Author:         psw

 * @CreateDate:     2018/9/17 14:49

 * @UpdateUser:     psw

 * @UpdateDate:     2018/9/17 14:49

 * @UpdateRemark:   修改內容

 */
@Configuration
@EnableSwagger2
public class Swagger2 {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //"com.rmw.crawler.manage.controller", web層所在的目錄
                .apis(RequestHandlerSelectors.basePackage("com.rmw.crawler.manage.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("springboot利用swagger構建api文件---資料來源管理系統")
                .description("簡單優雅的restfun風格")
                .termsOfServiceUrl("")
                .version("1.0")
                .build();
    }
}



  1. web中的controller中的方法上添加註解 如下圖:
    在這裡插入圖片描述
 常用註解:
- @Api()用於類;
表示標識這個類是swagger的資源
- @ApiOperation()用於方法;
表示一個http請求的操作
- @ApiParam()用於方法,引數,欄位說明;
表示對引數的新增元資料(說明或是否必填等)
- @ApiModel()用於類
表示對類進行說明,用於引數用實體類接收
- @ApiModelProperty()用於方法,欄位
表示對model屬性的說明或者資料操作更改
- @ApiIgnore()用於類,方法,方法引數
表示這個方法或者類被忽略
- @ApiImplicitParam() 用於方法
表示單獨的請求引數
- @ApiImplicitParams() 用於方法,包含多個 @ApiImplicitParam

具體使用舉例說明:
@Api()
用於類;表示標識這個類是swagger的資源
tags–表示說明
value–也是說明,可以使用tags替代 

程式碼:

package com.rmw.crawler.manage.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.rmw.crawler.manage.bean.DataSource;
import com.rmw.crawler.manage.service.SourceService;


import com.rmw.dubbo.api.CrawlerSourceInterface;
import com.rmw.dubbo.entity.*;
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.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Description:    source資料來源相關操作
 * @Author:         psw
 * @CreateDate:     2018/9/20 17:39
 * @UpdateUser:     psw
 * @UpdateDate:     2018/9/20 17:39
 * @UpdateRemark:   修改內容
 */
@RestController
@RequestMapping("/source")
public class SourceController {

    public static Logger log = LoggerFactory.getLogger(SourceController.class);

    //@Reference(version = "1.0.0")
    @Autowired
    private CrawlerSourceInterface sourceService;


    /**
     *  http://localhost:8080/crawler-manage/swagger-ui.html#/
     * 功能描述: 獲取資料來源列表資訊(無分頁)
     * @auther: psw
     * @param:
     * @return:
     * @exception
     * @date: 2018/9/17 16:35
     */

    @ApiOperation(value="獲取資料來源列表資訊", notes="獲取資料來源列表")
    @RequestMapping(value = "/find/all",method= RequestMethod.GET)

    public List<CrawlerSource> find(SourceVo sourceVo){
        List<CrawlerSource> sourceList = sourceService.findAll(sourceVo);
        log.info("獲取資料來源列表資訊結果:{}",sourceList);
        return sourceList;
    }

    /**
     * 無引數
     * @return
     */
    @RequestMapping(value = "/find/list",method= RequestMethod.GET)
    public List<CrawlerSource> finds(){
        List<CrawlerSource> sourceList = sourceService.findList();
        log.info("獲取資料來源列表資訊結果:{}",sourceList);
        return sourceList;
    }

   /**
    *
    * 功能描述: 根據sourceId來獲取資料來源詳細資訊
    * @auther: psw
    * @param:
    * @return:
    * @exception
    * @date: 2018/9/17 16:36
    */
    @ApiOperation(value="根據sourceId獲取資料來源詳細資訊", notes="根據sourceId來獲取資料來源詳細資訊")
    @ApiImplicitParam(name = "sourceId", value = "資料來源ID", required = true, dataType = "Integer", paramType = "path")
    @RequestMapping(value = "/get/{sourceId}",method= RequestMethod.GET)
    public Result findBySourceId(@PathVariable Integer sourceId){
        log.info("根據sourceId來獲取資料來源詳細資訊,sourceId:{}",sourceId);
        CrawlerSource dataSource = sourceService.getSource(sourceId);
        log.info("sourceId:{},資料來源詳細資訊:{}",sourceId,dataSource);
        return Result.success(dataSource);
    }

    /**
     * 根據條件分頁查詢資料來源
     * @param sourceVo
     * @param pageNo
     * @param pageSize
     * @return
     */
    @ApiOperation(value="根據條件分頁查詢", notes="根據條件分頁查詢獲取資料來源詳細資訊")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "pageNo", value = "頁碼", required = true, dataType = "int", paramType = "query"),
            @ApiImplicitParam(name = "pageSize", value = "每頁數量", required = true, dataType = "int", paramType = "query"),
            @ApiImplicitParam(name = "sourceVo", value = "查詢引數", required = false, dataType = "SourceVo")
    })
    @RequestMapping(value = "/get/page",method= RequestMethod.GET)
    public Result findBySourceVo(SourceVo sourceVo, int pageNo, int pageSize){
        log.info("根據條件分頁查詢,查詢引數:{}", sourceVo);
        PageModel<CrawlerSource> sourcePageModel = sourceService.findPagerByCondition(sourceVo,pageNo, pageSize);
        log.info("根據條件分頁查詢,查詢結果:{}", sourcePageModel);
        return Result.success(sourcePageModel);
    }

    /**
     * 新增資料來源
     * @param dataSource
     * @return
     */
    @ApiOperation(value="新增資料來源", notes="新增資料來源")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "dataSource", value = "新增資料來源", required = true, dataType = "CrawlerSource")
    })
    @RequestMapping(value = "/save",method= RequestMethod.POST)
    public Result saveSource(@RequestBody @Validated CrawlerSource dataSource, BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            return Result.error(Code.INVALID_PARAMETER);
        }
        log.info("新增資料來源:{}",dataSource);
        Result data = sourceService.insert(dataSource);
        return data;
    }


    /**
     * 更新資料來源
     * @param dataSource
     * @return
     */
    @ApiOperation(value="編輯資料來源", notes="編輯資料來源")
    @RequestMapping(value = "/update",method= RequestMethod.POST)
    public Result updateSource(@RequestBody CrawlerSource dataSource){
        log.info("更新資料來源:{}",dataSource);
        sourceService.update(dataSource);
        return Result.success(Code.OK);
    }

    /**
     * 刪除資料來源
     * @param dataSource
     * @return
     */
    @ApiOperation(value="刪除資料來源", notes="刪除資料來源")
    @RequestMapping(value = "/delete",method= RequestMethod.POST)
    public Result deleteSource(@RequestBody CrawlerSource dataSource){
        log.info("刪除資料來源:{}",dataSource);
        sourceService.deleteSource(dataSource);
        return Result.success(Code.OK);
    }

    /**
     * 開啟關閉
     * @param dataSource
     * @return
     */
    @ApiOperation(value="開啟/關閉資料來源", notes="開啟/關閉資料來源")
    @RequestMapping(value = "/switch",method= RequestMethod.POST)
    public Result startOrStop(@RequestBody CrawlerSource dataSource){
        log.info("開啟/關閉資料來源:{}",dataSource);
        sourceService.startOrStop(dataSource);
        return Result.success(Code.OK);
    }



}