IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot集成Swagger2 -> 正文阅读

[Java知识库]SpringBoot集成Swagger2

?一、博客概述

1 依赖引入
2 项目配置
3 实战测试

1、依赖引入

在依赖引入环节,我们需要特别注意的是 Boot 版本和 Swagger 依赖的关系。在这里,我们使用的是 2.7.3 的 Boot 和 2.9.2 的 Swagger。如果两者版本不匹配的话,会出现一些意料之外的坑;

          <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <!-- 排除自带的1.5.20版本-->
            <exclusions>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 使用1.5.22-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.22</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

?这里之所以要排除 20 的原因是因为实体类字段默认值的问题,如果我们在实体类中使用了 Swagger 的注解,而且定义的字段是 数值类型 的话,就会报异常。像下面这样:

public class SwaggerRequestVo {
    @ApiModelProperty(value = "姓名", required = true)
    private String name;
    @ApiModelProperty(value = "年龄", required = true)
    private Integer age;
}
此时,我们的 age 并没有使用 example 属性赋默认值,然后就会报下面的错误信息:
java.lang.NumberFormatException: For input string: ""

?这是因为,如果你不给这些数值字段设置默认值(使用 example 属性),它就会利用 String 赋默认值,然后就会出现这个异常信息;

2、项目配置

2.1 Swagger 主配置类

@Configuration
@EnableOpenApi
public class SwaggerConfig {
    @Bean
    public Docket getDocket() {
        // basePackage 属性指定了哪些包内的接口会被扫描进入文档内
        return new Docket(DocumentationType.OAS_30).groupName("测试Swagger02").apiInfo(getApiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.mjh.controller")).build();
    }

    private ApiInfo getApiInfo() {
        return new ApiInfoBuilder().title("Swagger的入门使用").version("2.0.0").build();
    }
}

2.2 Boot 启动类

?主启动类要把我们写的 Swagger 主配置类扫描到核心容器中,否则将无法正常使用文档

@ComponentScan(basePackages = "com.mjh")
@SpringBootApplication
public class SpringBootSwaggerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootSwaggerApplication.class, args);
    }

}

?3、实战测试

3.1 接口

@RestController
@RequestMapping(value = "/sc")
// Swagger 接口注解
@Api(value = "value", tags = "SwaggerController")
// lombok 日志工具注解
@Slf4j
public class SwaggerController {

    // Swagger 方法注解
    @ApiOperation(value = "tP-value", notes = "tP-notes")
    @PostMapping(value = "/tP")
    // SwaggerRequestVo 的信息在下面会展示出来
    public SwaggerRequestVo testPost(@ApiParam(value = "swaggerRequestVo", required = true) @RequestBody SwaggerRequestVo swaggerRequestVo) {
        log.info("testPost");
        return swaggerRequestVo;
    }

    @ApiOperation(value = "tG-value", notes = "tG-notes")
    @GetMapping(value = "/tG")
    public SwaggerRequestVo testGet(@ApiParam(value = "swaggerRequestVo", required = true) SwaggerRequestVo swaggerRequestVo) {
        log.info("testGet");
        return swaggerRequestVo;
    }
}

lombok 依赖:

<!--Lombok引入-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

SwaggerRequestVo 信息:

// lombok 注解,自动添加 set get 方法
@Data
// Swagger 注解,标注该实体类在文档中的信息
@ApiModel(value = "swaggerRequestVo", description = "Swagger测试-参数接收实体类")
public class SwaggerRequestVo {
    // Swagger 注解,标注该字段的信息
    @ApiModelProperty(value = "姓名", required = true)
    private String name;
    @ApiModelProperty(value = "年龄", required = true)
    private Integer age;
}

接下来我们可以尝试启动项目,但是你会发现它会报一个错误,错误的核心信息是这样的:

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

这里我们直接给处理方案,在主配置文件中加上这行代码,问题就会迎刃而解。原因的话手动百度下:

spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER

搞到这里,项目可以正常启动。所以我们可以访问到 Swagger 的在线文档页面。路径如下:

http://ip:port/swagger-ui.html

看到有页面,有对应的接口,就是成功了。但是在实际的开发中,我们通常会做出如下的操作:

首先我们会重新导入一个依赖到项目中,目的是想看到一个更符合使用习惯的UI界面;

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

然后我们访问新的地址,就可以得到一个符合国人习惯的在线接口文档界面了:

http://ip:port/doc.html

文档到这里,集成就是圆满结束了!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:56:31  更:2022-09-04 00:58:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:23:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码