SpringBoot结合swagger自动生成API文档

        Web开发常采用先后端分离的方式。先后端经过API进行交互,在Swagger UI中,先后端人员可以直观预览而且测试API,方便先后端人员同步开发。html

        在SpringBoot中集成swagger,步骤以下:java

        1.将下面的依赖添加到Maven项目的pom.xml文件中。springfox-swagger2组件帮助咱们自动生成描述API的json文件,而springfox-swagger-ui组件就是将这个json文件解析出来,用一种更友好的方式呈现出来。web

<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的配置类spring

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注解,做用是对方法以及参数的说明。json

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查询区域信息 的接口吧,点击将其展开。api

        点击 Try it out ,我们得输个int类型的区域ID作参数,输入完后点击execute后就能够看到结果啦!app

 

        迟到两年的swagger,算是正式认识了。前后端分离

日ji