SpringBoot整合Swagger
1、下载swagger相关依赖
maven仓库搜索springfox
我这里使用的springboot版本是2.7.13
swagger版本是2.9.2,因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.7.X使用的是PathPatternMatcher,版本不适配
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
问题解决:
配置中加入
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
导入这两个个依赖
2、配置Swagger的Config
@Configuration
@EnableSwagger2 //开启Swagger
public class SwaggerConfig {
}
访问http://localhost:6001/swagger-ui.html (配置文件中指定端口为6001)
3、配置Docket
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.enable(true)//是否开启Swagger
.groupName("km") //设置分组为km
.apiInfo(this.apiInfo())
.select()//做出筛选
//RequestHandlerSelectors配置要扫描接口的方式
//basePackage 指定要扫描的包路径
.apis(RequestHandlerSelectors.basePackage("com.ckm.docker_boot.controller"))
//过滤路径
//.paths(PathSelectors.ant(""))
.build();
}
private ApiInfo apiInfo(){
return new ApiInfo(
"ChangKM API",
"Chang的开发API文档",
"1.0",
"https://blog.csdn.net/weixin_47971118?spm=1011.2415.3001.5343",
new Contact("常可蒙", "https://blog.csdn.net/weixin_47971118?spm=1011.2415.3001.5343", "Chang000614@163.com"),//作者信息
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
重新启动
error被过滤掉,显示属于km的分组的的一些配置信息
4、设置多个分组(不同开发人员有自己的分组)
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("Group1");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("Group2");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("Group3");
}
重启之后
5、当扫描的文件中接口的返回值中存在实体类时,就可以发现Swagger中Models存在该实体类,若不存在返回实体类,则不显示Models
6、接口信息描述
@Api(tags = “测试控制器”) 注解放在类上,用于描述类
@ApiOperation(“查询全部用户信息”) 注解放在接口上,用于描述接口
@ApiParam(value = “姓名”)注解放在参数前,用于描述参数
@Api(tags = "测试控制器")
@RestController
public class DockerBootController {
@Value("${server.port}")
private String port;
@Autowired
private UserService userService;
@ApiOperation(value = "查询全部用户信息")
@GetMapping("/docker/selectAll")
public List<User> selectAll(){
List<User> userList = userService.selectAll();
for (User u :userList) {
System.out.println(u.getUsername());
}
return userList;
}
@ApiOperation(value = "测试")
@PostMapping("/test")
public String selectName( @RequestBody @ApiParam(value = "姓名")String name){
return "哈哈哈哈哈"+name;
}
@ApiOperation(value = "输出hello Docker")
@GetMapping("/docker/hello")
public String helloDocker(){
long l = System.currentTimeMillis();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String format = simpleDateFormat.format(l);
return "hello Docker"+"\t"+format;
}
@ApiOperation(value = "获取微服务端口")
@GetMapping("/docker/getPort")
public String getPort(){
return "服务端口:"+port;
}
@ApiOperation(value = "添加用户")
@PostMapping("/dokcer/addUser")
public String addUser(){
User user = new User();
user.setPassword("123456");
Integer integer = userService.addUser(user);
return "添加成功";
}
}
7、测试
输入 我是笑笑
正常输出
Swagger优势:
1、可以给接口添加注释信息,便于理解
2、接口文档实时更新(可以直接访问这个网址查看提供的api信息啊,实时更新)
2、可以在线测试
注意点:
代码打包发布前一定要关闭Swagger!