Swagger 使用学习
- Restful API文档在线自动生成文档,同步更新;
- 号称世界上最流行的API框架;
- 直接运行,可以在线测试API接口
- 支持多种语言;
使用教程
导入依赖
<!--swagger 集成-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
配置文件
//配置文件开启Swagger2
@EnableSwagger2
//配置类中使用此注解开启Swagger2,注入下面代码经行配置
//注入Swagger2的Docket的配置实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
//Swagger2配置信息初始化
private ApiInfo apiInfo(){
//作者信息
Contact smxr = new Contact("smxr", "https://smxr.com", "772519606@qq.com");
// 标题 描述 版本 组织 作者 许可 许可路径
return new ApiInfo(
"smxr的Swagger学习API文档",
"个人学习练习作品",
"1.1",
"https://smxr.com",
smxr,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
配置扫描接口
//注入Swagger2的Docket的配置实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//enable() 是否启动Swagger,如果启动为true,否false则不能在游览器中访问;
.enable(swagger)
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage 指定要扫描的包
//any() 扫描全部
//none() 不扫描
//withClassAnnotation() 扫描类上的注解,参数是一个注解类的类对象
//withMethodAnnotation() 扫描方法上的注解,参数是一个注解类的类对象
.select()
.apis(RequestHandlerSelectors.basePackage("com.smxr.controller"))
//.paths(PathSelectors.ant("/smxr/**")) //paths() 过滤什么路径,不扫描那个
.build()
;
}
Swagger2的开启和关闭
application-dev.yml--------------------------------
#swagger2 开启和关闭
swagger:
enable: true
application-prod.yml-------------------------------
#swagger2 开启和关闭
swagger:
enable: false
配置类中-------------------------------------------
//获取swagger环境属性
@Value("${swagger.enable}")
private boolean swagger;
//注入Swagger2的Docket的配置实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//enable() 是否启动Swagger,如果启动为true,否false则不能在游览器中访问;
.enable(swagger)
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage 指定要扫描的包
//any() 扫描全部
//none() 不扫描
//withClassAnnotation() 扫描类上的注解,参数是一个注解类的类对象
//withMethodAnnotation() 扫描方法上的注解,参数是一个注解类的类对象
.select()
.apis(RequestHandlerSelectors.basePackage("com.smxr.controller"))
//.paths(PathSelectors.ant("/smxr/**")) //paths() 过滤什么路径,不扫描那个
.build()
;
}
配置API文档的分组
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("smxr")//分组 一个Docket的实例为一个组,需要多个的话只需注入多个Docket实例并经行单独的配置即可
//enable() 是否启动Swagger,如果启动为true,否false则不能在游览器中访问;
.enable(swagger)
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage 指定要扫描的包
//any() 扫描全部
//none() 不扫描
//withClassAnnotation() 扫描类上的注解,参数是一个注解类的类对象
//withMethodAnnotation() 扫描方法上的注解,参数是一个注解类的类对象
.select()
.apis(RequestHandlerSelectors.basePackage("com.smxr.controller"))
//.paths(PathSelectors.ant("/smxr/**")) //paths() 过滤什么路径,不扫描那个
.build()
;
}
接口定义注解
@ApiModel("消息返回体") //返回数据模型
public class ResponseBean implements Serializable {
//返回数据模型属性
@ApiModelProperty(name = "code码",dataType = "Int",value = "是否正确响应")
private int code;
@ApiModelProperty(name = "消息说明",dataType = "String",value = "消息的说明")
private String message;
@ApiModelProperty(name = "返回数据",dataType = "Object",value = "返回的数据")
private Object data;
@RestController
@RequestMapping("/vue")
@Api(tags = "用户商城接口")//说明该类的作用,可以在UI界面上看到的注解,如果tags多个值,会生成多个list
public class AdminShopController {
@GetMapping("/signIn")
@ApiOperation(value = "vue初始化登录接口",notes = "说明该接口,提示内容") //接口说明
public ResponseBean vueLogin(@ApiParam(name = "user",value = "账户ID, 参数说明",required = true) @RequestParam String account,
@ApiParam("密码") @RequestParam String pass){//@ApiParam() 接口数据说明 属性required 是否必须
if (account==null||pass==null){
return ResponseUtils.Error(null,"账户密码不能为空!");
}
if(!account.equals("772519606@qq.com")||!pass.equals("123456")) return ResponseUtils.Error(null,"账户密码不能为空!");
System.out.println("账户密码:"+account+pass);
byte[] bytes = (account + pass).getBytes();
String string = Base64.getEncoder().encodeToString(bytes);
System.out.println("string:"+string);
return ResponseUtils.Success(string);
}