swagger学习笔记
什么是swagger
swagger是通过注解自动生成json或者yml文件,进而解析成api文档的一个组件,利用swagger-ui生成在线的可以实时跟新的api文档,方便前后端和协同开发.
基本配置
@Configuration
public class SwaggerConfig {
/**
* Doctet是swagger的 全局配置对象
* @return
/
@Bean
public Docket getDocket(){
Docket docket = new Docket(DocumentationType.SWAGGER_2);
//api帮助文档的描述信息
ApiInfo apiInfo = new ApiInfoBuilder()//构建者模式
.contact(//配置swagger文档主题内容
new Contact(“swagger开发文档”,//文档的发布者名称
“http://”,//文档发布者的网站信息
“123.com”))//文档发布者的邮箱
.description(“swager学习描述”)//文档的描述
.title(“swagger学习文档”)//文档的标题
.version(“1.1”)//文档的版本
.build();
//给docket上下文配置api描述信息
docket.apiInfo(apiInfo);
docket.select()//获取docket中的选择器,的那会类型是ApiSelectorBuilder,构建选择器:如:扫描什么包的注解
.apis(
Predicates.not(//取反 true–false false-true
RequestHandlerSelectors.withMethodAnnotation(//当方法上有注解时返回true
MyAnnotation4Swagger.class//方法的上的注解类
)
))
.apis(RequestHandlerSelectors.basePackage(“com.liu.controller”))//设定早苗那个包包含子包
.paths(
Predicates.or(//以下三个里面的任何一个都可以
PathSelectors.regex("/swagger/."),//使用正则表达式,约束生成API文档的路径地址,控制器里面只有swagger路径的才会生成文档,其他的不生成表示0-n个
PathSelectors.regex("/swagger2/."),
PathSelectors.regex("/.*")
)
)
.build();//重新构建Docket对象
//等价于
// docket.select()//获取docket中的选择器,的那会类型是ApiSelectorBuilder,构建选择器:如:扫描什么包的注解
// .apis(
// Predicates.and(
// Predicates.not(//取反 true–false false-true
// RequestHandlerSelectors.withMethodAnnotation(//当方法上有注解时返回true
// MyAnnotation4Swagger.class//方法的上的注解类
// )
// ),
// RequestHandlerSelectors.basePackage(“com.liu.controller”)
// )
// )
.apis(RequestHandlerSelectors.basePackage(“com.liu.controller”))//设定早苗那个包包含子包
// .build();//重新构建Docket对象
return docket;
}
}
controller类
/**
-
@Api—描述当前类型生成帮助文档的信息
-
属性:
-
tags:给当前类型定义别名,有几个别名就会在ui视图里面生成几个菜单
-
description:给当前类型生成的帮助文档一个描述信息
*/
@RestController
@RequestMapping("/swagger")
@Api(tags = {“mycontroller”,“swagger学习控制器”},description = “测试Api文档的描述信息”)
public class HelloController {
@RequestMapping("/entity")
public Myentity entity(){
return new Myentity();
}
// @ApiImplicitParam(name =“m”,value = “参数m的描述”,required = false,paramType = “字符串”,dataType = “名值对”)
@ApiImplicitParams(value = {
@ApiImplicitParam(name =“m”,value = “参数m的描述”,required = false,paramType = “字符串”,dataType = “名值对”),
@ApiImplicitParam(name=“n”,value = “n的描述”,required = true,paramType = “字符串(string)”,dataType = “名值对”)
})
@GetMapping("/test")
public String test(String m, String n){
return “test”;
}/**
- @ApiIgnore 当前注解描述的方法或者类不生成api帮助文档, 和前面写的自定义注解功能差不多
- @return
*/
@ApiIgnore
@GetMapping("/get")
public String get(){
return “get”;
}
@PostMapping("/post")
//为方法做描述信息
@ApiOperation(value=“post请求方法,做新增需求”,notes = “学习使用post请求的方法”)
public String post(
@ApiParam(name = “用户名(a)”,value = “用户新增提交的用户名”,required = true) String a,
@ApiParam(name=“密码 “,value = “新增用户的密码”,required = true) String b){
return “post”;
}
@MyAnnotation4Swagger
@RequestMapping(”/req”)
public String map( int m){
return “req”;
}
}
entity
/**
-
@Apimodel —描述一个实体类,这个实体成功任何一个生成api文档的方法的返回值类型的时候,次注解被解析
*/
@ApiModel
public class Myentity implements Serializable {
@ApiModelProperty(value = “主键”,name=“主键(id)”,required = false,example = “1”,hidden = false)
private Integer id;
@ApiModelProperty(value = “用户名”,name=“用户名(username)”,required = true,example = “张三”,hidden = false)
private String username;
@ApiModelProperty(value = “密码”,name=“密码(password)”,required = true,example = “123456”,hidden = false)
private String password;public Myentity() {
}