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

相关文章
|
14天前
|
Java 关系型数据库 MySQL
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
119 43
|
16天前
|
监控 前端开发 Java
SpringBoot集成Tomcat、DispatcherServlet
通过这些配置,您可以充分利用 Spring Boot 内置的功能,快速构建和优化您的 Web 应用。
48 21
|
23天前
|
自然语言处理 IDE Java
SpringBoot start.aliyun.com创建项目,解决properties乱码的问题
通过确保文件和开发环境的编码一致,配置 Maven 编码,设置 Spring Boot 应用和嵌入式服务器的编码,可以有效解决 properties 文件的乱码问题。以上步骤可以帮助开发者确保在 Spring Boot 项目中正确处理和显示多语言字符,避免因编码问题导致的乱码现象。
36 5
|
28天前
|
XML Java 应用服务中间件
SpringBoot项目打war包流程
本文介绍了将Spring Boot项目改造为WAR包并部署到外部Tomcat服务器的步骤。主要内容包括:1) 修改pom.xml中的打包方式为WAR;2) 排除Spring Boot内置的Tomcat依赖;3) 添加Servlet API依赖;4) 改造启动类以支持WAR部署;5) 打包和部署。通过这些步骤,可以轻松地将Spring Boot应用转换为适合外部Tomcat服务器的WAR包。
132 64
SpringBoot项目打war包流程
|
1月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
136 36
|
1月前
|
XML JavaScript Java
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
87 11
|
1月前
|
监控 Java Nacos
使用Spring Boot集成Nacos
通过上述步骤,Spring Boot应用可以成功集成Nacos,利用Nacos的服务发现和配置管理功能来提升微服务架构的灵活性和可维护性。通过这种集成,开发者可以更高效地管理和部署微服务。
208 17
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
369 12
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
84 8
|
2月前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
149 5

热门文章

最新文章