Springboot 集成Swagger 学习
Swagger简介前后端分离:Vue+SpringBoot1、大背景后端时代:前端只用管理静态页面;html==>后端。模板引擎JSP=>后端是主力前后端分离式时代:后端:后端控制层、服务层、数据访问层【后端团队】前端:前端控制层、视图层【前端团队】伪造后端数据,json已经存在了,不需要后端,前端工程依旧能跑起来前后端如何交互?==》API前后端相对独立,松耦合;前后端甚至可以部署在
·
目录
Swagger简介
前后端分离:Vue+SpringBoot
1、大背景
后端时代:
前端只用管理静态页面;html==>后端。模板引擎JSP=>后端是主力
前后端分离式时代:
- 后端:后端控制层、服务层、数据访问层【后端团队】
- 前端:前端控制层、视图层【前端团队】
伪造后端数据,json 已经存在了,不需要后端,前端工程依旧能跑起来
- 前后端如何交互?==》API
- 前后端相对独立,松耦合;
- 前后端甚至可以部署在不同的服务器上;
产生一个问题:
- 前后端集成联调,前端人员和后端人员无法做到“即使协商,尽早解决”,最终导致问题集中爆发;
解决方案:
- 指定schema【计划的提纲】,实时更新最新API,降低集成的风险。
- 制定word计划文档;
- 前后端分离:
前端测试后端接口:postman
后端提供接口,需要实时更新最新的消息及改动;
2、集成Swagger
- 最流行的API框架
- RestFul Api文档在线自动生成工具==》Api文档与API 定义同步更新
- 直接运行,可以在线测试API接口
- 支持多种语言:(java、PHP...)
3、SpringBoot集成Swagger
1) 新建一个SpringBoot web项目
2)导入相关依赖
<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>
3)编写一个HelloController
@RestController
public class HelloController {
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String hello(){
return "hello";
}
}
4) 配置 Swagger
@Configuration
@EnableSwagger2
public class SwaggerConfig {
}
5)启动项目 访问http://localhost:8080/swagger-ui.html
3、配置Swagger
@Configuration
@EnableSwagger2
public class SwaggerConfig {
//配置 Swagger的Docket 的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
//配置swagger信息=apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("珂瑞", "https://blog.csdn.net/xaccpJ2EE", "93643786@qq.com");
return new ApiInfo("Swagger 学习 API",
"不经历风雨怎能见彩虹",
"v1.0",
"https://blog.csdn.net/xaccpJ2EE",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList<VendorExtension>());
}
}
访问:
Swagger 配置扫描接口
Docket.select()
//配置 Swagger的Docket 的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage 指定要扫描的包
//any():扫描全部
//none():不扫描
//.RequestHandlerSelectors.withClassAnnotation(RestController.class) 扫描类上的注解,参数是一个注解的反射对象;实例为只扫描有注解RestController的类
//RequestHandlerSelectors.withMethodAnnotation(GetMapping.class) 扫描方法上的注解,实例为 只扫描有GetMapping 注解的方法
.apis(RequestHandlerSelectors.basePackage("com.man"))
//paths() 过滤什么路径
.paths(PathSelectors.ant("/"))
.build();
}
配置是否启动Swagger
//配置 Swagger的Docket 的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//设置是否开启Swagger,如果为Flase 则swagger 不能在浏览器中访问
.enable(false)
.select()
.apis(RequestHandlerSelectors.basePackage("com.man"))
//.paths(PathSelectors.ant("/"))
.build();
}
配置生产环境不启用Swagger
//配置 Swagger的Docket 的bean实例
@Bean
public Docket docket(Environment environment){
//设置要显示的swagger环境
Profiles profiles=Profiles.of("dev","test");
//通过environment.acceptsProfiles 判断是否处在自己设定的环境当中
boolean flag=environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//设置是否开启Swagger,如果为Flase 则swagger 不能在浏览器中访问
.enable(flag)
.select()
.apis(RequestHandlerSelectors.basePackage("com.man"))
//.paths(PathSelectors.ant("/"))
.build();
}
配置API文档的分组
//配置分组
.groupName("珂瑞")
//配置 Swagger的Docket 的bean实例
@Bean
public Docket docket(Environment environment){
//设置要显示的swagger环境
Profiles profiles=Profiles.of("dev","test");
//通过environment.acceptsProfiles 判断是否处在自己设定的环境当中
boolean flag=environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//配置分组
.groupName("珂瑞")
//设置是否开启Swagger,如果为Flase 则swagger 不能在浏览器中访问
.enable(flag)
.select()
.apis(RequestHandlerSelectors.basePackage("com.man"))
//.paths(PathSelectors.ant("/"))
.build();
}
页面显示
如何设置多个分组
多增加几个Docket 方法
@Bean
public Docket docketA(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docketB(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docketC(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
实体类配置:
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
}
Controller 类配置
@RestController
@RequestMapping("/test")
@Api(value = "测试",tags = "测试")
public class HelloController {
@GetMapping(value = "/hello")
@ApiOperation(value = "hello", notes = "无参传入")
public String hello(){
return "hello";
}
@PostMapping("/userInfo")
@ApiOperation(value = "用户", notes = "返回单个用户信息")
public User userinfo(){
return new User();
}
@PostMapping(value = "/hello2")
@ApiOperation(value = "hello2", notes = "返回用户名")
public String hello2(@ApiParam(name="用户名",required = true) String username){
return "hello "+ username;
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)