Swagger是什么
- Swagger是一款RESTFUL接口的文档在线自动生成+功能测试的功能软件
- Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务
- 目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器
如何使用Swagger2
引入swagger的依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
springboot整合swagger
//配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket creatRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) // 用于生成API信息
.select() // select()函数返回一个ApiSelectorBuilder实例,用来控制接口被swagger做成文档
.apis(RequestHandlerSelectors.basePackage("com.example.swaggerdemo.controller"))//指定扫描路径
.paths(PathSelectors.any())
.build();
}
//定义主界面api信息
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("小程序")
.description("SwaggerAPI文档")
.termsOfServiceUrl("")
.version("1.0")
.build();
}
}
使用Swagger
@RequestMapping("/user")
@RestController
@Api(tags="用户管理")
public class UserController {
@PostMapping("/get")
@ApiOperation("查询用户")
@ApiImplicitParam(name="id",value = "用户编号",required = true)
public User getUser(@RequestParam(required = true) Long id){
User user=new User();
user.setId(id);
user.setName("小兵");
user.setAge(20);
user.setHigh("180cm");
user.setHeight("70公斤");
user.setAddress("西岐");
return user;
}
}
访问本地链接localhost:8080/swagger-ui.html
配置swagger时遇到的问题
Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.NullPointerException
原因分析
- swagger版本和springboot出现了不兼容情况
- SpringBoot处理映射匹配的默认策略发生变化,即请求路径与SpringMVC处理映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser
解决方法
方案一 在 application.properties 配置文件添加配置:
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
方案二 在 配置类 添加注解@EnableWebMvc
方案三 根据实际,降低SpringBoot版本
我个人推荐第一种和第二种
Swagger3的使用
改变了依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
改变了注解以及配置中的部分内容
//配置类
@Configuration
@EnableOpenApi
public class SwaggerConfig {
@Bean
public Docket creatRestApi(){
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo()) // 用于生成API信息
.select() // select()函数返回一个ApiSelectorBuilder实例,用来控制接口被swagger做成文档
.apis(RequestHandlerSelectors.basePackage("com.example.swaggerdemo.controller"))//指定扫描路径
.paths(PathSelectors.any())
.build();
}
//定义主界面api信息
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("小程序")
.description("SwaggerAPI文档")
.termsOfServiceUrl("")
.version("1.0")
.build();
}
}
改变了本地链接localhost:8080/swagger-ui/
遇到的警告信息
WARN 14976 --- [ main] d.s.r.o.OperationImplicitParameterReader : Unable to interpret the implicit parameter configuration with dataType: , dataTypeClass: class java.lang.Void
这对整体没什么影响,但是就是有点别扭,怎么解决
在@ApiImplicitParam
注解上加上dataTypeClass属性的值,