zoukankan      html  css  js  c++  java
  • 第九章 SpringBoot系列整合swagger3 api接口文档

    系列文章目录

    第一章 SpringBoot系列之从0搭建项目
    第二章 SpringBoot系列返回json数据
    第三章 SpringBoot系列GlobalException全局异常捕获
    第四章 SpringBoot系列整合Mybatis做增删改查
    第五章 SpringBoot系列配置JPA访问数据
    第六章 SpringBoot系列使用JdbcTemplate操作数据
    第七章 SpringBoot系列静态资源处理,访问磁盘文件
    第八章 SpringBoot系列实现任务调度Scheduled


    前言

    日常开发过程中接口文档是必不可少得一项工作,由于接口增加、变更使得文档变得难以维护,也容易忘记或漏掉接口,说实话大部分开发者也不太愿意去维护这么个文档,还有就是接口测试角度分析,通常我们开发完一个接口需要使用接口调用工具postman等等http调用工具来做接口的测试,swagger的出现简直就是我们开发者的福音,swagger可自动为我们生成接口文档页面,可在页面直接查看接口入参、出参以及做接口测试,话不多说接下来我们就来看看SpringBoot项目是如何接入swagger api文档神器的。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、swagger3注解使用介绍

    @Api 写在controller类上,入参API接口名称/介绍
    @ApiOperation 用在接口方法上,入参接口名称/介绍
    @ApiModel 用在数据实体类上,入参实体类名称/介绍
    @ApiModelProperty 用在对象数据实体属性上,入参属性名称/介绍
    @ApiParam 单个请求参数说明
    @ApiImplicitParams 接口参数说明
    @ApiResponses 接口响应提示(比如400参数不对等等注释)
    @ApiIgnore 忽略接口方法

    二、代码整合demo

    1.pom.xml引入依赖

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    

    2.接口代码中加入swagger注解

    ①controller类

    package com.example.demo.controller;
    
    import com.example.demo.dao.JdbcPersonDao;
    import com.example.demo.dto.JsonDataDTO;
    import com.example.demo.model.PersonDO;
    import com.example.demo.service.PersonService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiParam;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    
    @Api("swagger3演示controller")
    @RestController
    @RequestMapping("/")
    public class DemoController {
    
        @Autowired
        private PersonService personService;
    
        @Autowired
        private JdbcPersonDao jdbcPersonDao;
    
        @ApiOperation("test接口")
        @PostMapping("/test")
        public String test(@RequestBody PersonDO personDO) {
            return "实体类入参demo";
        }
    
        @ApiOperation("test接口")
        @GetMapping("/test")
        public String test() {
            return "Hello World";
        }
    
        @ApiOperation("getJsonData接口")
        @GetMapping("/getJsonData")
        public JsonDataDTO getJsonData() {
            JsonDataDTO jsonDataDTO = new JsonDataDTO();
            jsonDataDTO.setName("张三");
            jsonDataDTO.setAge(18);
            jsonDataDTO.setSex("男");
            return jsonDataDTO;
        }
    
        @ApiOperation("globalExceptionTest接口")
        @GetMapping("/globalExceptionTest")
        public void globalExceptionTest() throws Exception {
            throw new Exception("发生异常啦!!!");
        }
    
        @ApiOperation("selectPersonInfo接口")
        @GetMapping("/selectPersonInfo")
        public PersonDO selectPersonInfo(@RequestParam("id") @ApiParam("主键ID") Long id) {
            return personService.selectPersonInfo(id);
        }
    
        @ApiOperation("selectPersonInfoJpaDemo接口")
        @GetMapping("/selectPersonInfoJpaDemo")
        public PersonDO selectPersonInfoJApademo(@RequestParam("id") @ApiParam("主键ID") Long id) {
            return jdbcPersonDao.getPersonDO(id);
        }
    
        @ApiOperation("queryDataForJdbc接口")
        @GetMapping("/queryDataForJdbc")
        public PersonDO queryDataForJdbc(@RequestParam("id") @ApiParam("主键ID") Long id) {
            return personService.selectPersonInfoJpaDemo(id);
        }
    
    }
    

    ②接口参数对象DTO

    package com.example.demo.dto;
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    @ApiModel("swagger接口对象实体类")
    @Data
    public class JsonDataDTO {
    
        /**
         * 姓名
         */
        @ApiModelProperty("姓名")
        private String name;
    
        /**
         * 年龄
         */
        @ApiModelProperty("年龄")
        private Integer age;
    
        /**
         * 性别
         */
        @ApiModelProperty("性别")
        private String sex;
    }
    

    3.增加swagger配置类

    package com.example.demo.config;
    
    import org.springframework.beans.factory.annotation.Value;
    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.oas.annotations.EnableOpenApi;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    
    import java.util.HashSet;
    
    @EnableOpenApi
    @Configuration
    public class SwaggerConfiguration {
    
        @Value("server.port")
        private String port;
    
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.OAS_30).pathMapping("/")
    
                    // 定义是否开启swagger,false为关闭,可以通过变量控制
                    .enable(true)
    
                    // 将api的元信息设置为包含在json ResourceListing响应中。
                    .apiInfo(apiInfo())
    
                    // 接口调试地址
                    .host("http://localhost:"+port)
    
                    // 选择哪些接口作为swagger的doc发布
                    .select()
                    .apis(RequestHandlerSelectors.any())
                    .paths(PathSelectors.any())
                    .build()
                    // 支持的通讯协议集合
                    .protocols(getProtocols("https", "http"));
        }
    
        private HashSet<String> getProtocols(String https, String http) {
            HashSet set = new HashSet<String>();
            set.add(https);
            set.add(http);
            return set;
        }
    
        /**
         * API 页面上半部分展示信息
         */
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder().title("Demo Api Doc")
                    .description("rest接口文档 lc")
                    .version("v1.0")
                    .build();
        }
    }
    

    4.设置排除拦截路径

    比如项目中登录拦截器,安全框架拦截等等,需要排除swagger路径不然可能会被拦截导致访问不了swagger界面。

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

    二、API可视化界面效果

    在这里插入图片描述
    POST请求接口,点右上角Try it out 可编辑入参并Execute做接口测试,往下就是响应信息,从图片我们可以看到代码中注释说明/名称。
    在这里插入图片描述
    在这里插入图片描述
    GET请求接口,点右上角Try it out 可编辑入参并Execute做接口测试,往下就是响应信息,从图片我们可以看到代码中注释说明/名称。

    在这里插入图片描述


    总结

    有到了总结时刻了,一句话:简直太好用啦!快点把它引入到你们项目当中,减少工作量!!!

  • 相关阅读:
    bzoj4358: permu
    bzoj4636: 蒟蒻的数列
    bzoj4229: 选择
    bzoj4561: [JLoi2016]圆的异或并
    bzoj2618: [Cqoi2006]凸多边形
    bzoj1803: Spoj1487 Query on a tree III
    bzoj2467: [中山市选2010]生成树
    PostgreSQL服务器存储参数的内部查看方法和实际表述之间的关系
    PostgreSQL 系统表
    PostgreSQL环境中查看SQL执行计划示例
  • 原文地址:https://www.cnblogs.com/javakfz/p/13938202.html
Copyright © 2011-2022 走看看