在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!!!

相关文章
|
11天前
|
前端开发 JavaScript Java
SpringBoot项目部署打包好的React、Vue项目刷新报错404
本文讨论了在SpringBoot项目中部署React或Vue打包好的前端项目时,刷新页面导致404错误的问题,并提供了两种解决方案:一是在SpringBoot启动类中配置错误页面重定向到index.html,二是将前端路由改为hash模式以避免刷新问题。
54 1
|
10天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
3天前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
22 10
|
2天前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
7天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
23 6
|
8天前
|
消息中间件 Java Kafka
springboot项目启动报错-案例情景介绍
springboot项目启动报错-案例情景介绍
17 2
|
10天前
|
开发工具 Python
django之drf集成swagger
django之drf集成swagger
|
10天前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
|
9天前
|
Java Spring
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
|
2天前
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
6 0
下一篇
无影云桌面