• Swagger2常用注解解析(轻松构建Swagger)


    一、SpringBoot集成Swagger2

    1. 引入相关jar包
    <!-- swagger2 配置 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.4.0</version>
    </dependency>
    <!-- 官方UI -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.4.0</version>
    </dependency>
    <!-- bootstrap-ui -->
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>swagger-bootstrap-ui</artifactId>
        <version>1.6</version>
    </dependency>
    
    1. 编写Swagger2文档
    package com.zgx.config;
    
    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.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    //使类被spring扫描到
    @Configuration
    //开启Swagger2
    @EnableSwagger2
    public class Swagger2 {
    
        //http://localhost:8088/swagger-ui.html    //简洁
        //http://localhost:8088/doc.html           //页面优化
    
        //配置Swagger2核心配置 docket
        @Bean
        public Docket createRestApi(){
            return new Docket(DocumentationType.SWAGGER_2) //指定api为Swagger2
                    .apiInfo(apiInfo())                    //用于定义api汇总信息
                    .select().apis(RequestHandlerSelectors.
                            basePackage("com.zgx.controller"))//指定controller包
                    .paths(PathSelectors.any())             //所有controller
                    .build();
    
        }
    
        private ApiInfo apiInfo(){
            return new ApiInfoBuilder()
                    .title("基于可穿戴设备的医疗监护系统接口api")              //文档页标题
                    .contact(new Contact("莫逸风",
                            "https://blog.csdn.net/qq_38723677",
                            "150****5317@163.com"))     //联系人信息
                    .description("专为可穿戴设备的医疗监护系统提供的api文档")    //详细信息
                    .version("0.0.1")                         //文档版本号
                    .termsOfServiceUrl("")                    //网站地址
                    .build();
        }
    }
    
    1. 优化Swagger2显示
    @ApiIgnore忽略该接口,或类
    
    //类注释
    @Api(value = "注册登录",tags = {"用于注册登录的相关接口"})
      
    //方法注释
    @ApiOperation(value = "用户名是否存在",notes = "用户名是否存在",httpMethod = "GET")
     
    //BO实体类注释
    @ApiModel(value = "用户对象BO", description = "从客户端,由用户传入的数据封装在此entity中")
        
    //BO实体类变量注释  
    @ApiModelProperty(value = "用户名", name = "username", example = "moyifeng", required = true)
    

    二、常用注解解析

    官方wiki

    • @Api()用于类;
      表示标识这个类是swagger的资源

    • @ApiOperation()用于方法;
      表示一个http请求的操作

    • @ApiParam()用于方法,参数,字段说明;
      表示对参数的添加元数据(说明或是否必填等)

    • @ApiModel()用于类
      表示对类进行说明,用于参数用实体类接收

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

    • @ApiIgnore()用于类,方法,方法参数
      表示这个方法或者类被忽略

    • @ApiImplicitParam() 用于方法
      表示单独的请求参数

    • @ApiImplicitParams() 用于方法;

      包含多个 @ApiImplicitParam

    具体使用举例说明:

    @Api()
    用于类;表示标识这个类是swagger的资源
    tags–表示说明
    value–也是说明,可以使用tags替代
    但是tags如果有多个值,会生成多个list

    @Api(value="用户controller",tags={"用户操作接口"})
    @RestController
    public class UserController {
    
    }
    

    在这里插入图片描述

    @ApiOperation() 用于方法;表示一个http请求的操作
    value用于方法描述
    notes用于提示内容
    tags可以重新分组(视情况而用)
    @ApiParam() 用于方法,参数,字段说明;表示对参数的添加元数据(说明或是否必填等)
    name–参数名
    value–参数说明
    required–是否必填

    @Api(value="用户controller",tags={"用户操作接口"})
    @RestController
    public class UserController {
         @ApiOperation(value="获取用户信息",tags={"获取用户信息copy"},notes="注意问题点")
         @GetMapping("/getUserInfo")
         public User getUserInfo(@ApiParam(name="id",value="用户id",required=true) Long id,@ApiParam(name="username",value="用户名") String username) {
         // userService可忽略,是业务逻辑
          User user = userService.getUserInfo();
    
          return user;
      }
    }
    

    在这里插入图片描述

    @ApiModel()用于类 ;表示对类进行说明,用于参数用实体类接收
    value–表示对象名
    description–描述
    都可省略
    @ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
    value–字段说明
    name–重写属性名字
    dataType–重写属性类型
    required–是否必填
    example–举例说明
    hidden–隐藏

    @ApiModel(value="user对象",description="用户对象user")
    public class User implements Serializable{
         private static final long serialVersionUID = 1L;
         @ApiModelProperty(value="用户名",name="username",example="xingguo")
         private String username;
         @ApiModelProperty(value="状态",name="state",required=true)
          private Integer state;
          private String password;
          private String nickName;
          private Integer isDeleted;
    
          @ApiModelProperty(value="id数组",hidden=true)
          private String[] ids;
          private List<String> idList;
         //省略get/set
    }
    
    @ApiOperation("更改用户信息")
    @PostMapping("/updateUserInfo")
    public int updateUserInfo(@RequestBody @ApiParam(name="用户对象",value="传入json格式",required=true) User user){
    
         int num = userService.updateUserInfo(user);
         return num;
      }
    

    在这里插入图片描述
    在这里插入图片描述

    @ApiIgnore()用于类或者方法上,可以不被swagger显示在页面上
    比较简单, 这里不做举例

    @ApiImplicitParam() 用于方法
    表示单独的请求参数
    @ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam
    name–参数ming
    value–参数说明
    dataType–数据类型
    paramType–参数类型
    example–举例说明

    @ApiOperation("查询测试")
    @GetMapping("select")
    //@ApiImplicitParam(name="name",value="用户名",dataType="String", paramType = "query")
    @ApiImplicitParams({
    @ApiImplicitParam(name="name",value="用户名",dataType="string", paramType = "query",example="xingguo"),
    @ApiImplicitParam(name="id",value="用户id",dataType="long", paramType = "query")})
    public void select(){
    
    }
    

    在这里插入图片描述

    本文参考CSDN博主「兴国First」的原创文章

    原文链接:https://blog.csdn.net/u014231523/article/details/76522486

  • 相关阅读:
    微信小程序,搜索结果关键词高亮 wxml不能动态识别html标签
    关于vue 全局loading方案
    element ui树样式问题
    Promise.all( ) 的使用
    关于form表单校验问题
    vue 异步改同步 获取结果 动态函数
    1.关于数据for循环不要用index作为key,2.面二次刷新404问题(空白) 的探讨 3. vue图片上传
    element ui点击切换皮肤
    关于element ui input、以及button样式不能覆盖的解决办法(登录页面)
    vue版本根据当前路由匹配到根父节点并且激活
  • 原文地址:https://www.cnblogs.com/zhangguangxiang/p/14232517.html
Copyright © 2020-2023  润新知