Swagger简介
前后端分离
前端:完全脱离后端,前端独立开发,根据后端提供的接口可以事先设置一些假数据进行开发
后端:事先主要的控制层,业务逻辑,持久层,注重高可用,高并发,高扩展
前后端最后设置在不同的服务器上进行部署。
前后端分离开发是目前业界的web主流开发模式,所以两个组的文档设置就很重要,而swagger就是一个在线的接口API框架,支持多种语言。
Swagger相关依赖的导入
<!--导入swagger-->
<!-- 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>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Swagger的简单配置
首先创建一个controller,用来接收一个hello的请求返回简单的字符串。
@RestController
public class HelloController {
@RequestMapping("/hello")
public String HelloRequest(){
return "Hello String";
}
}
接着创建一个SwaggerConfig配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig {
// 将Docket主键交给Spring容器管理
@Bean
public Docket docket() {
// 选择Swagger2构造参数
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
}
//这里需要创建ApiInfo对象,作为Docket.apiInfo方法的参数
private ApiInfo apiInfo() {
Contact contact = new Contact("Contact Name", "blog.csdn.net", "xxxx@qq.com");
//关于Swagger文档的信息,标题名字,简单描述,版本号,地址
return new ApiInfo("Swagger接口文档", "后端接口文档", "0.0.1",
"http://localhost:8080", contact, "Apache-2.0",
"www.goole.com", new ArrayList<>());
}
然后启动Application类,访问http://localhost:8080/swagger-ui.html
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
// .enable(false); 构造中是true,这里如果设置成false再访问swagger.html就会出现下面这种情况
}
默认构造是设置成true
设置成false就会报错
Swagger扫描指定接口
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/*
*RequestHandlerSelectors
* 指定接口扫描方式
* */
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("club.qy.swagger.demo.controller")) // any扫描全部,none不扫描
.paths(PathSelectors.ant("/controller/**")) //paths过滤路径,any过滤全部,rex正则过滤,none不过滤
.build();
}
private ApiInfo apiInfo() {
Contact contact = new Contact("Contact Name", "blog.csdn.net", "911168435@qq.com");
return new ApiInfo("Swagger接口文档", "后端接口文档", "0.0.1",
"http://localhost:8080", contact, "Apache-2.0",
"www.goole.com", new ArrayList<>());
}
}
@APiOperation注解主要使用在方法上,为请求的方法提供注释
@GetMapping("/name/{name}")
@ApiOperation(value = "根据名称模糊查询分类")
public R searchTypeByName(@PathVariable(value = "name") String name){
if(StringUtils.isEmpty(name)) {
return null;
}
List<QuestionBank> list = qbService.list(new QueryWrapper<QuestionBank>().like("product_name", name));
return R.ok(list);
}
@Api(value = “用户 Controller”,tags = {“用户访问接口”})
@Api注释一般作用在类上给Controller标记标签名字和注释
@RestController
@RequestMapping("/user")
@Api(value="用户 Controller",tags="用户访问接口")
public class UserController{
}
@ApiModel作用在实体类上,@ApiModelProperty作用在类的属性上,为属性添加注释,这些注释最后都是为swagger在线文档提供参考,更容易是其他开发者理解与调试。
设置多个选择框的方法:
在Swagger的配置类中,创建多个Docket组件,将其交给Spring接管,每个Docket可以设置成不同的组名和其他不同的文档标题描述等属性。
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("战三");
}
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("李四");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("王五");
}
Swagger的作用
- 通过Swagger可以给一些难以理解的属性和接口设置注释
- 接口文档实时更新
- 可以在线测试