栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Swagger2笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Swagger2笔记

swagger笔记
  • 简介
    • 前后端分离
    • Swagger
  • SpringBoot集成
  • 配置Swagger
    • 配置Swagger信息
    • 配置扫描接口
    • 配置Swagger启动
    • SpringBoot绕过拦截器
    • 配置分组
    • 配置实体类
    • 配置携带Token和去除自带状态码
    • 常用注解
      • 方法
      • 参数
      • 状态码
  • Swagger接口测试
  • 总结
  • 配置文件模板

简介 前后端分离

主流:前端Vue+后端SpringBoot

  • 后端:后端控制层,服务层,数据访问层【后端团队】
  • 前端:前端控制层,视图层【前端团队】
  • 前后端如何交互?==> API
  • 前后端相对独立,松耦合
  • 前后端甚至可以部署在不同的服务器上;

遇到的问题:

  • 前后端集成联调,前端人员和后端人员无法做到“及时协商,尽早解决”,最终导致问题集中爆发

解决方案:

  • 首先制定schema【计划的提纲】,事实更新最新API,降低集成的风险
  • 早些年:制定word计划文档
  • 前后端分离:
    • 前端测试后端接口:postman
    • 后端提供接口,需要实时更新最新的消息及改动

新的问题:

  • 前端经常抱怨后端给的接口文档与实际情况不一致
  • 后端编写和维护接口文档很麻烦,经常来不及更新
  • swagger提供了解决方案
Swagger
  • 号称世界上最流行的Api框架
  • RestFul Api 文档在线自动生成工具 => API文档和API定义同步更新
  • 直接运行,在线测试API接口
  • 支持多种语言(java、php…)

我们可以使用swagger工具帮助我们团队和企业,更简单地进行API接口开发。

官网:https://swagger.io/

SpringBoot集成

第一步: 新建一个SpringBoot—Web项目

第二步: 引入依赖(最新版是3.0版本,但和前面版本有不少区别,而且2.9用的人最多)


    io.springfox
    springfox-swagger2
    2.9.2





    io.springfox
    springfox-swagger-ui
    2.9.2

第三步: 编写一个hello工程

第四步: 配置Swagger ==> config

@Configuration
@EnableSwagger2 // 开启swagger2
public class SwaggerConfig {
}

**第五步 ** 测试运行:http://localhost:8080/swagger-ui.html

配置Swagger 配置Swagger信息

Swagger有一个bean实例:Docket

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    // 配置了swagger的bean实例
    @Bean
    public Docket docket() {
        return new Docket(documentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }

    // 配置Swagger文档信息=apiInfo, 覆盖了默认的信息
    private ApiInfo apiInfo() {
        // contact: 作者信息
        Contact contact = new Contact(
                "重明鸟",
                "https://blog.csdn.net/Chongming_bird?spm=1000.2115.3001.5343",
                "2428028346@qq.com"
        );
        return new ApiInfo(
                "重明鸟的Swagger笔记", // 重要的信息
                "这是一个描述",		 // 重要的信息
                "v1.0",
                "www.baidu.com",
                contact,
                "Apache 2.0",
                "http://www.apahce.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

运行结果:

配置扫描接口

让swagger扫描特定的接口:Docket.select()

// 配置了swagger的bean实例
    @Bean
    public Docket docket() {
        return new Docket(documentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                // RequestHandlerSelectors,配置扫描接口的方式
                .apis(RequestHandlerSelectors.basePackage("com.dm.swagger.controller"))
                .build();
    }

测试结果:

.basePackage():指定包扫描

.any():扫描全部

.none():全部扫描

.withClassAnnotation():扫描类上的注解

  • .withMethodAnnotation(RestContorller.class)即只扫描带有@RestController注解的类

  • .withMethodAnnotation():扫描方法上的注解

  • paths():过滤什么路径

    • paths(PathSelectors.ant("/dm boolean open = environment.acceptsProfiles(profiles); return new Docket(documentationType.SWAGGER_2) ... // 配置携带token访问 .globalOperationParameters(pars) // 去掉swagger自带的状态码 .useDefaultResponseMessages(false) ; } 常用注解 类

      ​ controller层

      • @Api()

        用于类
        表示标识这个类是swagger的资源

        @Api(tags = "这是一个Hello接口")@RestControllerpublic class UserController {}
        

        实体类

        • @ApiModel()

          用于类
          表示对类进行说明,用于参数用实体类接收

        • @ApiModelProperty()

          用于方法,字段
          表示对model属性的说明或者数据操作更改

      方法
      • @ApiOperation()

        用于方法
        描述一个请求的操作

            @ApiOperation(value = "简单描述方法", notes = "详细描述方法")    @GetMapping(value = "/hello")    public String hello(){}
        

      参数
      • @ApiParam()

        用于方法,参数,字段说明;

        • name–参数名
        • value–参数说明
        • required–是否必填
        public String hello(@ApiParam(name ="用户名", value = "这是用户名", required = true)                     String username){        return "hello";    }
        

      • @ApiIgnore()

        用于类,方法,方法参数
        表示这个方法或者类被忽略,即不在文档中显显示

      • @ApiImplicitParam()

        用于方法
        表示单独的请求参数

        • name–参数名
        • value–参数说明
        • dataType–数据类型
        • paramType–参数类型
        • example–举例说明
      • @ApiImplicitParams()

        用于方法,包含多个 @ApiImplicitParam

        @GetMapping(value = "/user")    @ApiImplicitParams(        {            @ApiImplicitParam(name = "name", value = "用户名", dataType = "String", paramType = "query", example = "重明鸟"),            @ApiImplicitParam(name = "age", value = "年龄", dataType = "int", paramType = "query", example = "20")        }    )    public User user(String name, int age){        return new User();    }
        

      状态码

      注意:注解配置状态码前请先去掉自带的状态码!

      去掉自带的状态码:

      new Docket()        //More config        .useDefaultResponseMessages(false) //<-- this should be false...;
      
      • @ApiResponse(code = xxx, message = "xxx")
      • @ApiResponses()
      @ApiResponses({            @ApiResponse(code = 1000, message = "非HTTP状态码,返回值JSON code字段值,描述:成功"),            @ApiResponse(code = 401, message = "非HTTP状态码,返回值JSON code字段值,描述:无token")    })
      
      • 设置全局状态码

      打开SWAGGER配置类,找到初始化DOCKET的地方。添加如下代码

      弄懂了再写
      
      Swagger接口测试

      像postman那样用就好了

      总结
      1. swagger可以帮我们生成接口文档,方便前端调阅测试
      2. swagger可以帮我们测试接口
      3. 正式发布的时候一定一定一定要记得关闭swagger,不然被用户访问到会很不安全!
      配置文件模板

      以后做项目直接复制粘贴

      @EnableSwagger2   //开启Swagger 注解@Configurationpublic class SwaggerConfig {    //配置Swagger 的Docket 信息    @Bean    public Docket docket(Environment environment) {        // 配置带token测试        ParameterBuilder ticketPar = new ParameterBuilder();        List pars = new ArrayList();        //Token 名        ticketPar.name(AnswerConstant.HTTP_HEADER_ANSWER_ACCESS_TOKEN).description("token")                .modelRef(new ModelRef("string")).parameterType("header")                //header中的token参数非必填,传空也可以                .required(false).build();        pars.add(ticketPar.build());        Profiles profiles = Profiles.of("meng");                boolean open = environment.acceptsProfiles(profiles);        return new Docket(documentationType.SWAGGER_2)                .apiInfo(apiInfo()) //配置文档信息                .groupName("ChongMing") // 配置分组                .enable(open)   //wang是我的开发环境,如果是这个环境的话就打开swagger,而是不是这个环境是再spring.profiles.active 配置的                .select()                .apis(RequestHandlerSelectors.basePackage("com.yvnze.ydyp.modules.user.controller"))                .paths(PathSelectors.ant("        //作者信息        Contact DEFAULT_ConTACT = new Contact("云泽", "http://没有.com", "baizhouWHP@163.com");        return new ApiInfo(                "云牍云篇",   //Swagger APi文档标题                "云顶书院云牍云篇项目API文档",//Api 文档描述                "1.1", //文档版本                "云泽项目组",                (Contact) DEFAULT_CONTACT,                "Apache 2.0",//开源版本号                "http://www.apache.org/licenses/LICENSE-2.0",                new ArrayList<>()        );    }}
      
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号