在SpringBoot项目中集成Swagger2

简介: 在SpringBoot项目中集成Swagger2

在这里插入图片描述

👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟
🌈擅长领域:Java、大数据、运维、电子
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!

@[TOC]

简介

  • 号称世界上最流行的API框架
  • Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新
  • 直接运行,在线测试API
  • 支持多种语言 (如:Java,PHP等)
  • 官网:https://swagger.io/

SpringBoot集成Swagger


SpringBoot集成Swagger => springfox,两个jar包

  • Springfox-swagger2
  • swagger-springmvc

使用Swagger

  • springboot-web项目
  • 加入swagger的两个依赖

    image.png

  • 要使用Swagger,我们需要编写一个配置类-SwaggerConfig来配置 Swagger

    /**
     * @author starrysky
     * @title: SwaggerConfiguration
     * @projectName Swagger2_Final
     * @description: 配置类
     * @date 2021/2/200:52
     */
    @Configuration
    //开启swagger2
    @EnableSwagger2
    public class SwaggerConfiguration {
    }
  • 5、访问测试 :http://localhost:8080/swagger-ui.html ,可以看到swagger的界面;

在这里插入图片描述

配置Swagger

  1. Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。

    @Bean //配置docket以配置Swagger具体参数
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2);
    }
  2. 可以通过apiInfo()属性配置文档信息

    /**
         * 配置Swagger信息apiInfo
         * 配置文档信息
         *
         * @return new ApiInfo
         */
        @Bean
        public ApiInfo apiInfo() {
            Contact contact = new Contact("Starrysky", "https://www.cnblogs.com/SkystarX/", "1974952857@qq.com");
            return new ApiInfo(
                    //标题
                    "Blue-Sky的API文档",
                    //描述
                    "即使夜再黑也会天亮!",
                    //版本
                    "v1.0",
                    //组织连接
                    "https://www.cnblogs.com/SkystarX/",
                    //联系人信息
                    contact,
                    //许可证
                    "Apache 2.0 许可",
                    //许可连接
                    "http://www.apache.org/licenses/LICENSE-2.0",
                    //扩展
                    new CopyOnWriteArrayList<>());
        }
  3. Docket 实例关联上 apiInfo()

    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }
  4. 重启项目,访问测试 http://localhost:8080/swagger-ui.html

配置扫描接口

  1. 构建Docket时通过select()方法配置怎么扫描接口。

    /**
         * 配置Swagger的Docket的Bean实例
         *
         * @return new Docket
         */
        @Bean
        public Docket docket(Environment environment) {
    
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("icu.lookyousmileface.controller"))
                    .build();
        }

    ⚠️ Tips:需要在.select()和.build()之间加入才可以。

    apis参数

    //扫描包
    .apis(RequestHandlerSelectors.basePackage("icu.lookyousmileface.controller"))
    //扫描所有,项目中的所有接口都会被扫描到
    .apis(RequestHandlerSelectors.any())
    // 不扫描接口
    .apis(RequestHandlerSelectors.none())
    //存在指定注解的类
    .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
  2. 除此之外,我们还可以配置接口扫描过滤:

    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
            .apis(RequestHandlerSelectors.basePackage("icu.lookyousmileface.controller"))
            // 配置如何通过path过滤,即这里只扫描请求以/hello开头的接口
            .paths(PathSelectors.ant("/hello/**"))
            .build();

    ⚠️ Tips:

    path参数

    any() // 任何请求都扫描
    none() // 任何请求都不扫描
    regex(final String pathRegex) // 通过正则表达式控制
    ant(final String antPattern) // 通过ant()控制

配置Swagger开关

  1. 通过enable()方法配置是否启用swagger,如果是false,swagger将不能在浏览器中访问了

    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .enable(false) //配置是否启用Swagger,如果是false,在浏览器将无法访问
            .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
            .apis(RequestHandlerSelectors.basePackage("icu.lookyousmileface.controller"))
            // 配置如何通过path过滤,即这里只扫描请求以/kuang开头的接口
            .paths(PathSelectors.ant("/hello/**"))
            .build();
    }
  2. 如何动态配置当项目处于test、dev环境时显示swagger,处于prod时不显示

    @Bean
    public Docket docket(Environment environment) {
        // 设置要显示swagger的环境
        Profiles of = Profiles.of("dev", "test");
        // 判断当前是否处于该环境
        // 通过 enable() 接收此参数判断是否要显示
        boolean b = environment.acceptsProfiles(of);
        
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .enable(b) //配置是否启用Swagger,如果是false,在浏览器将无法访问
            .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
            .apis(RequestHandlerSelectors.basePackage("icu.lookyousmileface.controller"))
            // 配置如何通过path过滤,即这里只扫描请求以/kuang开头的接口
            .paths(PathSelectors.ant("/hello/**"))
            .build();
    }
  3. 可以在项目中增加一个激活环境dev的配置文件查看效果!

配置API分组

  1. 如果没有配置分组,默认是default。通过groupName()方法即可配置分组

    @Bean
    public Docket docket(Environment environment) {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
            .groupName("hello") // 配置分组
            // 省略配置....
    }
  2. 重启项目查看分组

    @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");
    }
    
    @Bean
        public ApiInfo apiInfo1() {
    
    @Bean
        public ApiInfo apiInfo2() {
  3. 重启项目查看即可

实体配置

  1. 新建一个实体类

    /**
     * @author starrysky
     * @title: User
     * @projectName Swagger2_Final
     * @description: pojo-user
     * @date 2021/2/211:11
     */
    @ApiModel("用户实体类")
    @Component
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        @ApiModelProperty("用户ID")
        private Integer id;
        @ApiModelProperty("用户名称")
        private String name;
        @ApiModelProperty("用户年龄")
        private Integer age;
        @ApiModelProperty("用户性别")
        private String sex;
        @ApiModelProperty("用户邮箱")
        private String email;
    }

    ⚠️ Tips:

    @ApiModel:为类添加注释

    @ApiModelProperty:为类属性添加注释,hidden设置为true可以隐藏该属性

    @ApiParam:参数、方法和字段上,controller获取请求的参数上

    @Api:作用在模块类上

    @ApiOperation:作用在接口方法上

  2. 只要这个实体在请求接口的返回值上(即使是泛型),都能映射到实体项中:

        @ResponseBody
        @ApiOperation("user请求")
        @PostMapping("/user")
        public User userSign( User user){
            return user;
    
        }
  3. 重启查看测试,会发现Model的pojo的属性是乱序的,并且后台报错java.lang.NumberFormatException:For input string:""

    解决方案:

    @ApiModel("用户实体类")
    @Component
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        @ApiModelProperty(value = "用户ID",position = 1,example = "1")
        private Integer id;
        @ApiModelProperty(value = "用户名称",position = 2)
        private String name;
        @ApiModelProperty(value = "用户年龄",position = 3,example = "16")
        private Integer age;
        @ApiModelProperty(value = "用户性别",position = 4)
        private String sex;
        @ApiModelProperty(value = "用户邮箱",position = 5)
        private String email;
    }
    • position用于解决乱序,example保证Integer类型的有参考值。
  4. 正常的效果的截图

在这里插入图片描述

拓展:其他皮肤

1、默认的 访问 http://localhost:8080/swagger-ui.html

image.png

在这里插入图片描述

2、bootstrap-ui 访问 http://localhost:8080/doc.html

image.png

在这里插入图片描述
3、Layui-ui 访问 http://localhost:8080/docs.html

image.png

在这里插入图片描述
4、mg-ui 访问 http://localhost:8080/document.html

image.png

在这里插入图片描述

总结

  1. 通过Swagger给的一些比较难理解的属性或者接口,增加注释信息
  2. 接口文档实时更新
  3. 可以在线测试

!!!⚠️ 正式发布的时候需要关闭Swagger!!!

相关文章
|
1天前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
65 12
|
7天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
37 8
|
1月前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
|
2月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
80 5
|
2月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
62 4
|
2月前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
139 1
SpringBoot获取项目文件的绝对路径和相对路径
|
2月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
66 1
|
2月前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
66 8
|
2月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
56 2
|
2月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
437 1