当前位置: 代码迷 >> 综合 >> SpringBoot集成Swagger UI从零搭建 + 配置 + 使用说明
  详细解决方案

SpringBoot集成Swagger UI从零搭建 + 配置 + 使用说明

热度:71   发布时间:2023-12-15 09:33:24.0

导航

  • Swagger介绍
  • Swagger图解
  • SpringBoot集成Swagger UI
    • 新建SpringBoot项目
    • 整合Swagger
    • 配置Swagger信息
    • 配置Swagger扫描路径
  • 根据项目环境决定是否启用Swagger
  • 多人协作,设置不同分组的Swagger
  • Swagger 实体类注解
    • @ApiModel() 用于类
    • @ApiModelProperty() 用于方法,字段
  • Swagger接口注解
    • @Api()用于类
    • @ApiOperation()用于方法
    • @ApiIgnore() 用于类或方法上,可以不被Swagger显示
    • @ApiParam() 用于参数前,注释该参数

Swagger介绍

基于RestFul 风格的文档自动生成工具;

可以实现API定义与API文档同步更新;
简化团队项目中API开发;
支持在线测试API接口;

Swagger图解

Swagger-ui界面
在这里插入图片描述

SpringBoot集成Swagger UI

新建SpringBoot项目

在这里插入图片描述其中Group(GruopID)一般为 域名+公司名称(例如org.apache)
Artifact(ArtifactID)一般为 项目或者模块名称 (例如swagger)
Version 表示当前项目的版本
GruopID+ArtifactID+Version 俗称坐标,可以唯一标识一个Maven项目
在这里插入图片描述需要勾选Spring Web(或Spring Web Starter)
在这里插入图片描述点击finish,完成
在这里插入图片描述

整合Swagger

在pom.xml中加入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> 

为方便后续配置Swagger,创建一个Swagger配置类

@Configuration//声明当前类为配置类
@EnableSwagger2//启用Swagger2
public class SwaggerConfig {
    
}

启动项目,访问默认端口+/swagger-ui.html,出现如下页面,说明配置成功
例:http://localhost:8080/swagger-ui.html
在这里插入图片描述

此时只有基本的error处理器
在这里插入图片描述当我们新增了一个/hello 的API时

@RestController
public class HelloController {
    @GetMapping(value = "/hello")//推荐写法
//@RequestMapping(value = "/hello",method = RequestMethod.GET) 等价于以上写法public String Hello(){
    return "hello";}
}

在这里插入图片描述

配置Swagger信息

@Configuration//声明当前类为配置类
@EnableSwagger2//启用Swagger2
public class SwaggerConfig {
    //修改默认配置bean@Beanpublic Docket myDocket(){
    return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());}private ApiInfo apiInfo(){
    return new ApiInfo("测试文档",//swagger标题"A-p-i-A-p-i-A-p-i",//swagger描述"v1.0",//swagger版本"https://swagger.io/",//服务条款Urlnew Contact("robot001","www.baidu.com","@email"),//联系人信息"Apache 2.0",// 许可证"http://www.apache.org/licenses/LICENSE-2.0",// 许可证Urlnew ArrayList<>());}
}

重新运行发现Swagger配置信息已更改

在这里插入图片描述

配置Swagger扫描路径

return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())//配置Swagger信息
// .enable(false)//是否启用Swagger---true:(默认)正常使用;false:禁用,页面显示无法加载.select().apis(RequestHandlerSelectors.basePackage("com.ahy.swagger.controller"))//--->设置需要扫描的包
// .select().apis(RequestHandlerSelectors.any())//--->扫描所有
// .select().apis(RequestHandlerSelectors.none())//--->不扫描
// .select().apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))//--->扫描带有指定注解的类
// .select().apis(RequestHandlerSelectors.withMethodAnnotation(GetMapping.class))//--->扫描带有指定注解的方法.paths(PathSelectors.ant("/hello1/**"))//扫描指定路径.build();

再次运行发现空空如也,因为我们扫描了指定包和指定路径,而这个路径不存在
在这里插入图片描述

根据项目环境决定是否启用Swagger

准备工作
application.properties:设置为开发环境

spring.profiles.active=dev

application-dev.properties:设置开发环境端口

server.port=8081

application-test.properties:设置测试环境端口

server.port=8082

加载Swagger之前先判断环境,开发环境可用Swagger

@Configuration//声明当前类为配置类
@EnableSwagger2//启用Swagger2
public class SwaggerConfig {
    //修改默认配置bean@Beanpublic Docket myDocket(Environment environment){
    //设置需要显示Swagger的环境Profiles profiles = Profiles.of("dev");//判断当前是否处于设定的环境中boolean flag = environment.acceptsProfiles(profiles);return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())//配置Swagger信息.enable(flag)//是否启用Swagger---true:正常使用;false:禁用,页面显示无法加载.select().apis(RequestHandlerSelectors.basePackage("com.ahy.swagger.controller"))//--->设置需要扫描的包.build();}private ApiInfo apiInfo(){
    return new ApiInfo("测试文档",//swagger标题"A-p-i-A-p-i-A-p-i",//swagger描述"v1.0",//swagger版本"https://swagger.io/",//服务条款Urlnew Contact("robot001","www.baidu.com","@email"),//联系人信息"Apache 2.0",// 许可证"http://www.apache.org/licenses/LICENSE-2.0",// 许可证Urlnew ArrayList<>());}
}

生产环境8081端口下可正常显示页面
其它环境下无法显示页面

多人协作,设置不同分组的Swagger

@Configuration//声明当前类为配置类
@EnableSwagger2//启用Swagger2
public class SwaggerConfig {
    @Beanpublic Docket myDocket1(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("111");}@Beanpublic Docket myDocket2(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("222");}@Beanpublic Docket myDocket3(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("333");}
}

在这里插入图片描述

Swagger 实体类注解

@ApiModel() 用于类

@ApiModelProperty() 用于方法,字段

@ApiModel(value = "用户实体类",description = "每个用户")
public class User {
    @ApiModelProperty(value = "用户名",required = true,example = "xiaoming")private String username;@ApiModelProperty(value = "用户名",required = true,example = "123456")private String password;public String getUsername() {
    return username;}public String getPassword() {
    return password;}
}
public class HelloController {
    //接口中的返回值包含实体类,则会显示在Model中//字段若是private修饰,需要有get方法才会显示该字段@GetMapping("/user")public User user() {
    return new User();//不返回user则不会显示Models}
}

在这里插入图片描述

Swagger接口注解

基于RestFul的请求形式

@Api()用于类

@ApiOperation()用于方法

@ApiIgnore() 用于类或方法上,可以不被Swagger显示

@ApiParam() 用于参数前,注释该参数

@Api(tags = {
    "用户请求控制器"})//控制器注解
@RestController
public class HelloController {
    @ApiOperation(value = "User控制类",notes = "处理用户请求")//类名注解@GetMapping("/user1/{username}")public String user1(@ApiParam(name = "username",value = "用户名",required = true)@PathVariable String username){
    //参数注解System.out.println("username = " + username);return "hello:" + username;}
}

在这里插入图片描述请求测试如下
在这里插入图片描述

  相关解决方案