当前位置:首页 > 技术 > 正文内容

Spring Boot 集成 Swagger 实现 API 文档自动化

访客 技术 2026年7月3日 1

1. 引入 Maven 依赖

在 Spring Boot 项目中使用 Swagger 生成接口文档,首先需要添加对应的依赖包。通过引入 springfox 框架,可以实现 API 的自动扫描与可视化展示。

<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. 配置 Swagger 配置类

创建一个配置类启用 Swagger 功能,并定义文档的元信息及扫描范围。该类需标注 @Configuration@EnableSwagger2 注解。

@Configuration
@EnableSwagger2
public class ApiDocumentationConfig {

    @Bean
    public Docket buildDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(generateApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo generateApiInfo() {
        return new ApiInfoBuilder()
                .title("用户服务 API 文档")
                .description("基于 Spring Boot 与 Swagger 构建的后端接口说明")
                .version("1.0.0")
                .build();
    }
}

3. 在控制器中使用注解描述接口

通过在 Controller 类和方法上添加 Swagger 注解,可清晰地描述每个接口的功能和参数。

@RestController
@RequestMapping("/api/users")
@Api(tags = "用户操作接口")
public class UserManagementController {

    @PostMapping
    @ApiOperation("创建新用户")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "username", value = "用户名", example = "张三"),
        @ApiImplicitParam(name = "address", value = "居住地址", example = "北京", required = true)
    })
    public ResponseEntity<UserDto> createUser(String username, @RequestParam String address) {
        UserDto user = new UserDto();
        user.setUsername(username);
        user.setAddress(address);
        return ResponseEntity.ok(user);
    }

    @GetMapping("/{id}")
    @ApiOperation("根据ID获取用户详情")
    @ApiImplicitParam(name = "id", value = "用户编号", required = true, dataType = "Integer", paramType = "path")
    public ResponseEntity<UserDto> fetchUser(@PathVariable Integer id) {
        UserDto user = new UserDto();
        user.setId(id);
        user.setUsername("测试用户");
        return ResponseEntity.ok(user);
    }

    @PutMapping("/{id}")
    @ApiOperation("更新用户信息")
    public ResponseEntity<UserDto> updateUser(@PathVariable Integer id, @RequestBody UserDto user) {
        user.setId(id);
        return ResponseEntity.ok(user);
    }
}

4. 常用注解说明

  • @Api:用于类级别,标记该控制器提供的一组相关接口。
  • @ApiOperation:描述某个具体接口的作用。
  • @ApiImplicitParam:描述单个请求参数,支持设置示例值、是否必填等属性。
  • @ApiImplicitParams:包含多个 @ApiImplicitParam 的容器注解。
  • 注意:required = true@ApiImplicitParam 中仅影响 UI 展示,实际参数校验仍需配合 @RequestParam(required = true) 使用。

5. 实体类字段说明

当接口接收对象类型参数时,可在实体类字段上使用 @ApiModelProperty 注解进行详细说明。

@ApiModel(description = "用户数据传输对象")
public class UserDto {
    @ApiModelProperty(value = "唯一标识符", example = "1001")
    private Integer id;

    @ApiModelProperty(value = "登录名称", example = "王五")
    private String username;

    @ApiModelProperty(value = "所在城市", example = "上海")
    private String address;

    // getter 和 setter 方法
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }

    public String getAddress() { return address; }
    public void setAddress(String address) { this.address = address; }
}

6. 查看文档界面

启动项目后访问 http://localhost:8080/swagger-ui.html 即可查看自动生成的交互式 API 文档页面,支持在线调试接口。

Swagger UI 界面截图

7. 与 Spring Security 共存配置

若项目中集成了 Spring Security,需放行 Swagger 相关资源路径,避免被安全拦截。

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring()
        .antMatchers("/swagger-ui.html")
        .antMatchers("/webjars/**")
        .antMatchers("/v2/api-docs")
        .antMatchers("/swagger-resources/**");
}
标签: Spring Boot

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。