学习目标:
- 了解Swagger的作用和概念
- 了解前后端分离
- 在SpringBoot中继承Swagger
官网: http://swagger.io
在项目使用Swagger需要springbox
- swagger2
- ui
SpingBoot集成Swagger
1.新建项目Spring = web项目
2.导入对应依赖
<!-- 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>
3.编写工程
4.配置Swagger ==》 Config
@Configuration
@EnableSwagger2
public class SwaggerConfig {
}
5.测试运行
http://localhost:8080/swagger-ui.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vYK40sBO-1633937486819)(C:\Users\issuser\AppData\Roaming\Typora\typora-user-images\image-20210414110401303.png)]
6.调整信息
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
//配置Swagger信息 = apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("zt", "https://localhost:8080/hello", "123@qq.com");
return new ApiInfo("Zt的Swagger",
"Zt Swagger Test",
"1.0",
"https://localhost:8080/hello",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
界面变化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OsZpwfRQ-1633937486821)(C:\Users\issuser\AppData\Roaming\Typora\typora-user-images\image-20210416113547830.png)]
Swagger配置扫描接口
Docket.select();
各种属性内容:
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//enable是是否启动Swagger,false为否
.enable(true)
//下拉框选择分组
.groupName("zt")
.select()
//RequestHandlerSelectors,配置要扫描接口的方式
//any();全部扫描
//none();不扫描
//basePackage;扫描指定的包
//withClassAnnotation();扫描类上的注解,参数是一个注解的反射对象 eg:RestController.class
//withMethodAnnotation();扫描方法上的注解 eg:GetMapping.class
.apis(RequestHandlerSelectors.basePackage("com.swagger_test.demo.controller"))
//paths(); PathSelectors 过滤什么路径
//ant();过滤路径下的 eg:"/contorller/**"
.paths(PathSelectors.none())
.build();
}
配置API文档分组方法:
.groupName("xxx")
配置多个分组方法:利用多个Docket实例(不要重名)
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("1");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("2");
}
写法实例:
@Api("Hello控制类")
@RestController
public class HellowController {
@GetMapping(value = "/hello")
public String hello(){
return "hello";
}
//只要接口中,返回值存在实体类,就会被扫描到Swagger
@PostMapping(value = "/user")
public User user(){
return new User();
}
//Operation接口,不是放在类上的,而是放在方法上
@ApiOperation("Hello控制")
@GetMapping(value = "/hello2")
public String hello3(@ApiParam("用户名") String username){
return "hello" + username;
}
@ApiOperation("Post测试")
@PostMapping(value = "/posttest")
public User postTest(@ApiParam("用户名") User user){
return user;
}
@ApiOperation("Post测试2")
@PostMapping(value = "/posttest2")
public String postTest2(@ApiParam("用户名") String username){
return username;
}
}