一、注解的使用 和 说明

结构化说明如下:
@Api:用在请求的类上,表示对类的说明 
    tags="说明该类的作用,可以在UI界面上看到的注解"    (也就是给类取别名)
    value="该参数没什么意义,在UI界面上也看到,所以不需要配置"
  
@ApiOperation:用在请求的方法上,说明方法的用途、作用
    value="说明方法的用途、作用"
    notes="方法的备注说明"
  
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
    @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
        name:参数名
        value:参数的汉字说明、解释
        required:参数是否必须传
        paramType:参数放在哪个地方
            · header --> 请求参数的获取:@RequestHeader
            · query --> 请求参数的获取:@RequestParam
            · path(用于restful接口)--> 请求参数的获取:@PathVariable
            · body(不常用)
            · form(不常用)    
        dataType:参数类型,默认String,其它值dataType="Integer"       
        defaultValue:参数的默认值
 
@ApiResponses:用在请求的方法上,表示一组响应
    @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
        code:数字,例如400
        message:信息,例如"请求参数没填好"
        response:抛出异常的类
 
@ApiModel:用于响应类上,表示一个返回响应数据的信息
            (这种一般用在post创建的时候,使用@RequestBody这样的场景,
            请求参数无法使用@ApiImplicitParam注解进行描述的时候)
    @ApiModelProperty:用在属性上,描述响应类的属性

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

二、POM 依赖注入

这里要注意的是springboot整合swagger要注意版本的兼容

以下是版本的兼容:

Spring Boot版本 Swagger 版本
2.5.6 2.9.2
Spring Boot版本 Swagger 版本
2.6.5 3.0.0
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency></dependencies>

三、启动类 添加@EnableSwagger2注解

/*** @EnableSwagger2-是springfox提供的一个注解,代表swagger2相关技术开启。* 会扫描当前类所在包,及子包中所有的类型中的注解。做swagger文档的定制*/
@SpringBootApplication
@EnableSwagger2
public class application {public static void main(String[] args) {SpringApplication.run(application.class, args);}
}

四、创建一个controller类

package com.study.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class Mycontroller {@RequestMapping("/reg")public String reg(String m) {return "reg";}@GetMapping("/get")public String get(String a,String b){return "get";}@PostMapping("/post")public String post(){return "post";}@GetMapping("/test")public String test(String m,String n){return  "test";}}

运行项目后,打开浏览器访问swagger的ui进行测试

http://localhost:8080/swagger-ui.html

五、创建Swagger的配置类,并进行配置

package com.study.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;@Configuration
public class SwaggerConfig {/*** 创建Docket类型的对象。并使用spring容器管理。* DOcket是swagger中的全局配置对象。* @return*/@Beanpublic Docket docket(){Docket docket = new Docket(DocumentationType.SWAGGER_2);//ApiInfo 就是API帮助文档的描述信息。 informationApiInfo apiInfo =new ApiInfoBuilder().contact(   //配置swagger文档主题内容。new Contact("Swagger开发文档", //是文档的发布者名称"http://www.baidu.com", //是文档发布者的网站地址。企业网站"123@qq.com")  //文档发布者的电子邮箱).title("Swagger框架学习帮助文档").description("Swagger框架学习帮助文档详细描述-Swagger框架是一个用于开发RestAPI帮助文档的框架").version("1.1").build();//给docket上下文配置api描述信息docket.apiInfo(apiInfo);return docket;}
}

再重新运行项目,刷新浏览器,发现和刚才明显的区别,这就是配置swagger配置文件后,对文档主题内容的修改。

六、在swagger配置类里 配置扫描包

docket.select() //获取Docket中的选择器。返回ApiSelectorBuilder。构建选择器的。 如:扫描什么包的注解。.apis(RequestHandlerSelectors.basePackage("com.imooc.controller"));  //设定扫描哪个包(包含子包)中的注解  包扫描规则
return docket;

七、创建自定义注解,设置不需要生成接口文档的方法

7.1 生成一个自定义注解类 ,注意要加上@interface 代表当前类是一个注解

package com.study.anno;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;//这里是自定义注解 自定义注解设置不需要生成接口文档的方法/*** @interface 代表当前类是一个注解** @Target-描述当前的注解可以定义在什么资源上。*   属性value*      -定义具体的资源。  包括:*          -ElementType.METHOD 可以定义在方法上*          -ElementType.TYPE 可以定义在类型上*          -ElementType.FIELD 可以定义在属性上*          -ElementType.PARAMETER 可以定义在方法参数上** @Retention -当前注解在什么时候有效* 属性 value*    -定义具体的生效标记*      - RetentionPolicy.RUNTIME - 运行时有效*      - RetentionPolicy.SOURCE - 源码中有效*      - RetentionPolicy.CLASS - 字节码有效*/
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation4Sagger {//自定义注解中的属性。相当于@MyAnnotation4Sagger(value="")String value() default "";
}

7.2 在 Swagger的配置类 添加规则

添加取反规则,当扫描到自定注解后取反,返回false,这样就会使不需要生成的接口在文档中不显示

docket.select() //获取Docket中的选择器。返回ApiSelectorBuilder。构建选择器的。 如:扫描什么包的注解。.apis(Predicates.not( // 取反。false -> true  true -> false    自定义注解取反规则RequestHandlerSelectors.withMethodAnnotation(  // 当方法上有注解的时,返回trueMyAnnotation4Sagger.class )  //也就是说他回去扫描包里面的所有注解 当方法上有该注解的时候返回true)).build();//.apis(RequestHandlerSelectors.basePackage("com.imooc.controller"))  //设定扫描哪个包(包含子包)中的注解  包扫描规则
return docket;

7.3 在controller类中 给不许要生成的接口文档的方法添加上自定义注解

@MyAnnotation4Sagger

启动项目后 只显示 get 和 post 接口

八、路径范围配置

在swagger配置类中添加 .paths()规则

.paths(  //设置生成文档的路径范围Predicates.or( //设置多个规则符合任意一个即可通过。PathSelectors.regex("/swagger/.*"), //使用正则表达式,约束生成API文档的路径地址PathSelectors.regex("/swagger2/.*"),PathSelectors.regex("/.*"))
)

设置完在controller类中添加所设置的路径

运行后

九、常用注解@Api

在controller类上添加:

@Api(tags = {"MyController","Swagger学习控制器"},description = "测试AIP控制器")

运行项目后

十、常用注解@ApiOperation()

在方法上添加

@ApiOperation(value = "post方法,执行数据新增操作",notes = "Swagger学习使用-处理POST请求处理的方法")

运行项目后

十一、常用注解@ApiParam

在参数上添加

@ApiParam(name = "用户名 (a)",value = "新增用户时提供的用户名",required = true) String a,@ApiParam(name = "密码 (b)",value = "新增用户时提供的用户密码",required = true) String b

运行项目后(可以与get 做对比)

十二、常用注解@ApiIgnore

直接在方法上添加注解

运行项目后:

十三、常用注解   @ApiImplicitParams() 和 @ApiImplicitParam()

直接在方法上添加

@ApiImplicitParams(value = {@ApiImplicitParam(name = "m",value = "m参数描述",required = false,paramType = "body",dataType = "String"),@ApiImplicitParam(name = "n",value = "n参数描述",required = true,paramType = "body",dataType = "String")
})

运行项目后

十四、常用注解  @ApiModel()  和  @ApiModelProperty()

在实体类中添加@ApiModel() 在, 属性上添加@ApiModelProperty()

package com.study.entity;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;import java.io.Serializable;
import java.util.Objects;/*** ApiModel - 描述一个实体类型。* 这个实体类型如果成为任何一个生成api帮助文档方法的返回值类型的时候,此注解被解析。*/
@ApiModel(value = "自定义实体-MyEntity",description = "MyEntity存储用户数据")
public class MyEntity implements Serializable {@ApiModelProperty(value = "主键",name = "主键(id)",required = false,example = "1",hidden = false)private String id;@ApiModelProperty(value = "姓名",name = "姓名(name)",required = true,example = "张三",hidden = false)private String name;@ApiModelProperty(value = "密码",name = "密码(password)",required = true,example = "my-password-123",hidden = false)private String password;public MyEntity() {}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;MyEntity myEntity = (MyEntity) o;return Objects.equals(id, myEntity.id) &&Objects.equals(name, myEntity.name) &&Objects.equals(password, myEntity.password);}@Overridepublic int hashCode() {return Objects.hash(id, name, password);}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

因为该注解被解析的条件要是 1.该实体类要是任意方法的返回值类型,2.该方法要在@Api()文档下

所以在controller中添加方法

@RequestMapping("/testEntity")
public MyEntity testMyEntity(){return new MyEntity();
}

运行后

springboot 集成 Swagger2 配置以及常用注解的说明和使用 ( 超详细)相关推荐

  1. Spring Boot 1.5.8集成Swagger2 + YApi —— Swagger常用注解说明

    前言 受新型冠状病毒的影响,在家像猪一样不是睡就是吃,闲着就学着用下Swagger和YApi,特将这几天的学习成果写成了这系列的文章,希望能对大家有所帮助.武汉加油,中国加油! Spring Boot ...

  2. springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题

    springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题 参考文章: (1)springboot集成swagger2多模块中文配 ...

  3. springboot集成swagger2构建RESTful API文档

    在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...

  4. SpringBoot集成Swagger2自动生成友好的RestApi测试页面及文档

    springBoot集成swagger2 水煮鱼又失败了 https://www.jianshu.com/p/002ce2f26103 1 背景 springBoot作为微服务首选框架,为其他服务提供 ...

  5. SpringBoot集成Swagger2

    SpringBoot集成Swagger2 刚开始用2.0.2.RELEASE版本的SpringBoot去继承2.7.0版本的springfox-swagger2一直出现请求下面这种情况,就是在启动Sp ...

  6. springboot集成swagger2测试接口

    springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...

  7. 13.9 SpringBoot集成Swagger2中遇到的问题

    13.9 SpringBoot集成Swagger2中遇到的问题 我们在使用SpringBoot集成Swagger2中,访问:http://127.0.0.1:8188/swagger-ui.html ...

  8. springboot集成swagger2,构建优雅的Restful API

    springboot集成swagger2,构建优雅的Restful API 转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/ ...

  9. springboot集成swagger2页面出现swagger-resources404

    springboot集成swagger2页面出现swagger-resources404 问题描述 访问/doc.html出现页面,但是没有接口文档,查看页面元素发现问题: /swagger-reso ...

最新文章

  1. php框架全局自定义错误,[TP笔记]ThinkPHP自定义错误页面、成功页面及异常页面
  2. python 递归乘法
  3. 0726------Linux基础----------线程池
  4. mixamo网站_超全面的素材网站推荐
  5. python中o_Python I/O与进程的详细讲解
  6. 学习 | MongoDB 索引和排序
  7. 栈的应用 - 就近匹配
  8. python画立体心形折纸图解_立体的心形盒子的折纸图解过程
  9. 电脑无法进入路由器192.168.1.1的解决办法
  10. WINVNC源码阅读(七)
  11. 基于VHDL的毛刺信号消除
  12. matlab 两个数中取小,matlab中取两个数中的较小值
  13. 新的一年强势推荐5个免费的在线工具
  14. 塞尔达传说-荒野之息 体验复盘
  15. 27岁程序员转职赏金猎人:一个漏洞10万美元,比工资香多了
  16. 一文带你理解前后端分离本质
  17. 斯密特正交化(matlab)
  18. 思科模拟器-vtp技术及相关配置
  19. 【软工项目组】第十七次会议
  20. 名师杀手(超级搞笑)

热门文章

  1. java 移动文件夹_java代码实现移动文件以及文件夹
  2. Synopsys 通过统一的电路仿真流程解决超融合 IC
  3. 火狐浏览器所有历史版本下载地址
  4. Golang function 函数详解
  5. 【3D建模制作技巧分享】如何使用ZBrush导出效果图
  6. 无法显示隐藏文件和文件夹
  7. 语音备忘录的音频怎么导出
  8. v-for中key的使用
  9. Android权限系统(一):开机获取权限信息
  10. 【论文阅读】基于贝叶斯广义核推理的可通行区域建图