SpringBoot——SpringBoot集成Swagger生成API文档

简介: SpringBoot——SpringBoot集成Swagger生成API文档

文章目录:


1.写在前面

2.步骤详解

2.1 pom文件中添加Swagger依赖

2.2 application.properties核心配置文件中配置Swagger

2.3 编写需要生成API文档的控制层代码

2.4 编写Swagger的配置类

2.5 访问测试

1.写在前面


说到Swagger(丝袜哥),首先了解一下OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,目前版本是V3.0,并且已经发布并开源在github上。(https://github.com/OAI/OpenAPI-Specification);

Swagger是目前最受欢迎的OpenAPI规范(OAS)开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发;

wagger官网:https://swagger.io/是一个开源项目,也就是提供jar)

Swagger2 版本:1.x2.x,现在都用2.x

Spring Boot也集成了Swagger,可以很方便地在springboot中使用Swagger生成api接口文档;

Swagger的作用:

随项目自动生成强大RESTful API文档,减少开发人员工作量;(不需要自己写api接口文档了),使用swagger,只需要在代码中添加一些注解即可生成API接口文档,便于同步更新API文档的说明,当然也有人诟病说这种方式与代码耦合在一起,智者见智仁者见仁;

另外生成的api文档页面带有测试功能,可以用来调试每个RESTful API接口;

2.步骤详解


2.1 pom文件中添加Swagger依赖

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

2.2 在application.properties核心配置文件中配置Swagger


这是一个自定义配置,需要在配置类中使用@Value注解读取。只有一行代码,true表示开启Swaggerfalse表示关闭Swagger

1.  #开启或关闭Swagger
2.  swagger.enable=true


2.3 编写需要生成API文档的控制层代码


在这个controller中,会用到大量的Swagger中的常用核心注解。

详细注解可参考官方:https://github.com/swagger-api/swagger-core/wiki/Annotations

Swagger常用注解:

@Api:用在类上,说明该类的作用;

@ApiOperation:用在方法上,说明方法的作用;

@ApiImplicitParams:用在方法上包含一组参数说明;

@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面:

      paramType:参数放在哪个地方;

             header-->请求参数的获取:@RequestHeader

             query-->请求参数的获取:@RequestParam

             path-->请求参数的获取:@PathVariable (用于restful接口);

             body(不常用);

            form(不常用);

       name参数名;

       dataType:参数类型;

       required:参数是否必须传;

       value:参数的意思;

       defaultValue:参数的默认值;

@ApiResponses:用于表示一组响应;

@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息;

        code:数字,例如400

        message:信息,例如 "请求参数不合法"

        response:抛出异常的类;

@ApiIgnore:使用该注解忽略这个API,在页面上不显示;

@ApiModel:描述一个Model的信息;

@ApiModelProperty:描述一个model的属性;

swagger安全性问题: 正式上线的时候,建议关闭swagger

package com.szh.springboot.controller;
import com.szh.springboot.model.User;
import io.swagger.annotations.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
 *
 */
@Api(tags = "SpringBoot集成Swagger2测试")
@Controller
public class SwaggerController {
    @ApiOperation(value = "获取用户信息",notes = "根据id获取用户详细信息")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "path",name = "id",value = "用户ID",dataType = "Integer"),
            @ApiImplicitParam(paramType = "path",name = "name",value = "用户姓名",dataType = "String"),
    })
    @ApiResponses({
            @ApiResponse(code = 200,message = "请求成功"),
            @ApiResponse(code = 400,message = "缺少必要的请求参数"),
            @ApiResponse(code = 401,message = "请求路径没有响应的权限"),
            @ApiResponse(code = 403,message = "请求路径被隐藏不能访问"),
            @ApiResponse(code = 404,message = "请求路径没有或页面跳转路径错误"),
            @ApiResponse(code = 405,message = "请求方法不支持"),
    })
    @RequestMapping(value = "/swagger/queryUser/{id}/{name}",method = RequestMethod.GET)
    public @ResponseBody User getUserInfo(@PathVariable("id") Integer id,
                                          @PathVariable("name") String name) {
        User user=new User();
        user.setId(id);
        user.setName(name);
        user.setPhone("18500000000");
        user.setEmail("szh@163.com");
        return user;
    }
    @ApiOperation(value = "添加用户信息",notes = "将用户信息添加之后保存到数据库")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body",name = "users",value = "用户对象",dataTypeClass = User.class)
    })
    @ApiResponses({
            @ApiResponse(code = 200,message = "请求成功"),
            @ApiResponse(code = 400,message = "缺少必要的请求参数"),
            @ApiResponse(code = 401,message = "请求路径没有响应的权限"),
            @ApiResponse(code = 403,message = "请求路径被隐藏不能访问"),
            @ApiResponse(code = 404,message = "请求路径没有或页面跳转路径错误"),
            @ApiResponse(code = 405,message = "请求方法不支持"),
    })
    @RequestMapping(value = "/swagger/addUser",method = RequestMethod.POST)
    public @ResponseBody User addUser(@RequestBody User users) {
        return users;
    }
    @ApiOperation(value = "修改用户信息",notes = "将用户信息修改之后保存到数据库")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body",name = "users",value = "用户对象",dataTypeClass = User.class)
    })
    @ApiResponses({
            @ApiResponse(code = 200,message = "请求成功"),
            @ApiResponse(code = 400,message = "缺少必要的请求参数"),
            @ApiResponse(code = 401,message = "请求路径没有响应的权限"),
            @ApiResponse(code = 403,message = "请求路径被隐藏不能访问"),
            @ApiResponse(code = 404,message = "请求路径没有或页面跳转路径错误"),
            @ApiResponse(code = 405,message = "请求方法不支持"),
    })
    @RequestMapping(value = "/swagger/updateUser",method = RequestMethod.PUT)
    public @ResponseBody User updateUser(@RequestBody User users) {
        return users;
    }
    @ApiOperation(value = "删除用户信息",notes = "将用户信息从数据中删除")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query",name = "id",value = "用户ID",dataType = "Integer")
    })
    @ApiResponses({
            @ApiResponse(code = 200,message = "请求成功"),
            @ApiResponse(code = 400,message = "缺少必要的请求参数"),
            @ApiResponse(code = 401,message = "请求路径没有响应的权限"),
            @ApiResponse(code = 403,message = "请求路径被隐藏不能访问"),
            @ApiResponse(code = 404,message = "请求路径没有或页面跳转路径错误"),
            @ApiResponse(code = 405,message = "请求方法不支持"),
    })
    @RequestMapping(value = "/swagger/deleteUser",method = RequestMethod.DELETE)
    public @ResponseBody Object deleteUser(@RequestParam("id") Integer id) {
        return "成功删除了id为 " + id + " 的用户";
    }
}

2.4 编写Swagger的配置类


在这个类中,使用@Value注解来读取核心配置文件中的自定义配置信息(开启或关闭Swagger的那个)

package com.szh.springboot.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 *
 */
@EnableSwagger2 //开启对Swagger2的支持
@Configuration //声明当前类是一个配置类
public class SwaggerConfig {
    @Value("${swagger.enable}")
    private Boolean swaggerEnable;
    //在Spring容器中配置一个Bean对象
    @Bean
    public Docket docket() {
        //链式编程(构建器模式),基本是固定
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(swaggerEnable)
                .apiInfo(apiInfo())
                .select()
                //扫描带有ApiOperation注解的所有方法,为它们生成API接口文档
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }
    //创建api的基本信息,自定义即可
    private ApiInfo apiInfo() {
        //链式编程(构建器模式),基本是固定
        return new ApiInfoBuilder()
                .title("用户信息中心接口文档")
                .description("SpringBoot集成Swagger2构建RESTful APIs")
                .termsOfServiceUrl("https://blog.csdn.net/weixin_43823808")
                .contact(new Contact("张起灵","https://blog.csdn.net/weixin_43823808","张起灵@163.com"))
                .version("1.0.0")
                .build();
    }
}

2.5 访问测试


上面几步都完成后,输入这个url访问:http://localhost:8080/swagger-ui.html得到API文档;(如果项目有上下文根,要在端口号的后面加上项目上下文根) 

将核心配置文件中的swagger.enable设置为true,即可看到如下结果


将其设置为false,就不能访问生成API文档了。

相关文章
|
10月前
|
人工智能 安全 架构师
告别旅行规划的"需求文档地狱"!这个AI提示词库,让你像调API一样定制完美旅程
作为开发者,旅行规划如同“需求地狱”:信息碎片、需求多变、缺乏测试。本文提出一套“企业级”AI提示词库,将模糊需求转化为结构化“API请求”,实现标准化输入输出,让AI成为你的专属旅行架构师,30分钟生成专业定制方案,提升决策质量,降低90%时间成本。
934 129
|
9月前
|
JSON API 数据格式
小红书API接口文档:笔记详情数据开发手册
小红书笔记详情API可获取指定笔记的标题、正文、互动数据及多媒体资源,支持字段筛选与评论加载。通过note_id和access_token发起GET/POST请求,配合签名验证,广泛用于内容分析与营销优化。
1967 3
|
监控 前端开发 安全
如何集成第三方支付API到电商网站
在电商网站中,集成第三方支付API是确保交易安全、提升用户体验的关键步骤。本文详细介绍了从选择支付提供商到上线监控的全流程,涵盖代码示例与实用建议,助您高效实现支付功能。
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1396 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
JSON Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
本文详细介绍了Swagger2的使用方法,包括在Spring Boot项目中的配置与应用。重点讲解了Swagger2中常用的注解,如实体类上的`@ApiModel`和`@ApiModelProperty`,Controller类上的`@Api`、`@ApiOperation`以及参数上的`@ApiParam`等。通过示例代码展示了如何为实体类和接口添加注解,并在页面上生成在线接口文档,实现接口测试。最后总结了Swagger的优势及其在项目开发中的重要性,提供了课程源代码下载链接供学习参考。
1031 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
666 0
|
前端开发 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档—— Swagger 简介
第6课介绍了在Spring Boot中集成Swagger2以展示在线接口文档的方法。随着前后端分离架构的发展,API文档成为连接前端与后端开发的重要纽带。然而,代码更新频繁导致文档难以同步维护,Swagger2解决了这一问题。通过Swagger,在线API文档不仅方便了接口调用方查看和测试,还支持开发者实时测试接口数据。本文使用Swagger 2.2.2版本,讲解如何在Spring Boot项目中导入并配置Swagger2工具,从而高效管理接口文档。
488 0
|
人工智能 API 开发工具
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
GitHub MCP Server是基于Model Context Protocol的服务器工具,提供与GitHub API的无缝集成,支持自动化处理问题、Pull Request和仓库管理等功能。
3580 2
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
SQL 人工智能 关系型数据库
Flink CDC YAML:面向数据集成的 API 设计
本文整理自阿里云智能集团 Flink PMC Member & Committer 徐榜江(雪尽)在 FFA 2024 分论坛的分享,涵盖四大主题:Flink CDC、YAML API、Transform + AI 和 Community。文章详细介绍了 Flink CDC 的发展历程及其优势,特别是 YAML API 的设计与实现,以及如何通过 Transform 和 AI 模型集成提升数据处理能力。最后,分享了社区动态和未来规划,欢迎更多开发者加入开源社区,共同推动 Flink CDC 的发展。
1001 12
Flink CDC YAML:面向数据集成的 API 设计