Spring Boot 接口测试:Postman + Swagger 实战(完整版)

最强PostMan使用教程(6)- 使用Postman导入swagger OPEN API 好久没有更新这个系列的文章了,最近使用postman去测试数字货币交易所的API接口,让我们继续吧, 阅读详情

Spring Boot 接口测试:Postman + Swagger 实战(完整版)

在Spring Boot接口开发中,“接口文档编写”和“接口测试验证”是两个高频且关键的环节——没有规范的接口文档,前后端对接易出现分歧;没有高效的测试工具,接口功能验证、问题排查会十分繁琐。

本文基于前文实现的「Spring Boot + MyBatis-Plus 单表CRUD + 统一返回格式 + 全局异常处理」项目,手把手实战 Postman 接口调试 + Swagger 接口文档自动生成,覆盖“文档生成→接口测试→问题排查”全流程,解决新手“不会写接口文档”“接口测试效率低”的痛点,贴合企业实际开发场景。

前置说明:本文基于Spring Boot 2.7.x版本,无缝衔接之前的用户管理CRUD接口(/api/user相关),所有操作可直接在现有项目中落地,无需额外新建项目;Swagger选用稳定的Knife4j(基于Swagger 2.0封装,UI更友好、配置更简单),避免Swagger 3.0与Spring Boot 2.7.x的兼容性问题。

一、核心目标与工具选型

1. 核心目标

  • Swagger:自动生成接口文档,替代手动编写文档,支持接口在线调试、参数说明、返回格式展示,降低前后端对接成本;

  • Postman:高效调试接口,支持接口保存、批量测试、环境配置、参数传递,验证接口功能是否符合预期(如CRUD、异常处理、统一返回格式)。

2. 工具选型说明

  • Swagger 选型:Knife4j(Spring Boot Starter 方式集成,无需复杂配置,UI美观,支持接口排序、文档导出,适配Spring Boot 2.7.x);

  • Postman 选型:最新版Postman(免费够用,支持Windows/Mac/Linux,功能完善,适合个人开发和团队协作);

  • 适配前提:项目已实现「统一返回格式」和「全局异常处理」,接口返回结构一致(Result),避免Swagger文档展示混乱。

二、第一步:集成 Swagger(Knife4j),自动生成接口文档

传统Swagger配置繁琐,且UI不够友好,本文选用Knife4j(国人开发的Swagger增强工具),通过导入依赖、简单配置,即可自动扫描接口,生成规范的接口文档,支持在线调试。

1. 导入Knife4j依赖(pom.xml)

在现有项目的pom.xml中,添加Knife4j的Spring Boot Starter依赖,无需额外导入Swagger核心依赖(Knife4j已内置),注意版本与Spring Boot 2.7.x适配。

<!-- Knife4j Swagger 增强工具(适配Spring Boot 2.7.x) -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

<!-- 若项目中未引入spring-boot-starter-web,需额外添加(本文项目已存在) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 编写Swagger核心配置类

创建Swagger配置类,配置文档基本信息(项目名称、作者、版本)、接口扫描范围、全局参数等,确保Swagger能正确扫描到Controller接口,生成完整文档。

package com.example.cruddemo.config;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
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;

/**
 * Swagger(Knife4j)配置类
 * 核心:配置接口扫描范围、文档信息,开启Knife4j增强功能
 */
@Configuration  // 标记为配置类,交给Spring管理
@EnableSwagger2  // 开启Swagger 2.0功能(Knife4j基于Swagger 2.0)
@EnableKnife4j   // 开启Knife4j增强功能(UI美化、文档导出等)
public class SwaggerConfig implements WebMvcConfigurer {

    /**
     * 配置Docket实例,指定Swagger文档的基本信息和扫描范围
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                // 配置文档基本信息(页面顶部展示)
                .apiInfo(apiInfo())
                // 是否开启Swagger(生产环境建议关闭,避免暴露接口)
                .enable(true)
                // 配置接口扫描策略
                .select()
                // 扫描指定包下的接口(修改为你的Controller包路径,关键!)
                .apis(RequestHandlerSelectors.basePackage("com.example.cruddemo.controller"))
                // 扫描所有接口(除了被@ApiIgnore注解标记的接口)
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * 配置Swagger文档基本信息(标题、作者、版本、描述等)
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 文档标题(必填)
                .title("Spring Boot 接口文档(用户管理CRUD)")
                // 文档描述(可选,说明接口用途)
                .description("基于Spring Boot + MyBatis-Plus + Knife4j + Postman 实战,包含用户CRUD、统一返回、全局异常处理接口")
                // 作者信息(姓名、网址、邮箱,可选)
                .contact(new Contact("开发者", "https://xxx.com", "xxx@163.com"))
                // 接口版本(可选,与项目版本一致)
                .version("1.0.0")
                // 文档版权信息(可选)
                .license("Apache 2.0")
                .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }
}

3. 配置Swagger访问权限(避免拦截,关键)

若项目中未配置拦截器,可跳过此步骤;若配置了拦截器(如登录拦截),需放行Swagger相关的路径,否则无法访问接口文档页面。

// 若有拦截器配置类,添加以下放行逻辑(示例)
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LoginInterceptor())
            .addPathPatterns("/**")  // 拦截所有接口
            // 放行Swagger相关路径,避免拦截
            .excludePathPatterns(
                    "/swagger-ui.html",
                    "/swagger-ui/**",
                    "/swagger-resources/**",
                    "/v2/api-docs",
                    "/v3/api-docs",
                    "/doc.html",  // Knife4j的默认访问路径
                    "/webjars/**"
            );
}

4. 接口添加Swagger注解(优化文档展示)

通过Swagger注解,给Controller、接口方法、参数添加说明,让生成的文档更清晰(无需添加注解也能生成文档,但可读性差),常用注解如下:

  • @Api:用在Controller类上,描述Controller的用途;

  • @ApiOperation:用在接口方法上,描述接口的功能、请求方式;

  • @ApiParam:用在接口参数上,描述参数的含义、是否必填;

  • @ApiModel:用在实体类上,描述实体类的用途(如User实体);

  • @ApiModelProperty:用在实体类字段上,描述字段的含义、类型、是否必填;

  • @ApiIgnore:用在接口/参数上,标记为忽略,不生成到接口文档中。

修改UserController和User实体类,添加Swagger注解:

4.1 实体类(User.java)添加注解
package com.example.cruddemo.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.util.Date;

/**
 * 用户实体类,对应数据库user表
 */
@Data
@TableName("user")
@ApiModel(value = "User对象", description = "用户信息实体类,对应数据库user表") // Swagger注解:描述实体类
public class User {

    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "用户主键ID", example = "1", dataType = "Long", hidden = false) // 描述字段
    private Long id;

    @NotBlank(message = "用户名不能为空")
    @Length(min = 1, max = 30, message = "用户名长度必须在1-30之间")
    @ApiModelProperty(value = "用户名", required = true, example = "张三", dataType = "String", notes = "长度1-30,不能为空")
    private String name;

    @NotNull(message = "年龄不能为空")
    @Positive(message = "年龄必须为正数")
    @ApiModelProperty(value = "用户年龄", required = true, example = "22", dataType = "Integer", notes = "必须为正数")
    private Integer age;

    @Email(message = "邮箱格式不正确")
    @ApiModelProperty(value = "用户邮箱", example = "zhangsan@163.com", dataType = "String", notes = "需符合邮箱格式")
    private String email;

    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // 格式化时间,便于文档展示
    @ApiModelProperty(value = "创建时间", dataType = "Date", hidden = true) // hidden=true:不展示在文档参数中(自动填充)
    private Date createTime;

    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "更新时间", dataType = "Date", hidden = true)
    private Date updateTime;
}
4.2 Controller(UserController.java)添加注解
package com.example.cruddemo.controller;

import com.example.cruddemo.common.BusinessException;
import com.example.cruddemo.common.Result;
import com.example.cruddemo.common.ResultCode;
import com.example.cruddemo.entity.User;
import com.example.cruddemo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 用户控制层,编写CRUD接口
 */
@RestController
@RequestMapping("/api/user")
@Api(tags = "用户管理接口", description = "包含用户新增、查询、修改、删除等CRUD接口,统一返回Result格式") // Swagger注解:描述Controller
@Validated
public class UserController {

    @Autowired
    private UserService userService;

    // 1. 新增用户(POST请求)
    @PostMapping("/add")
    @ApiOperation(value = "新增用户", notes = "新增用户,用户名不能为空、年龄必须为正数,创建时间自动填充", httpMethod = "POST")
    public Result<Void> addUser(
            @ApiParam(value = "用户信息实体", required = true, notes = "需传入name、age,email可选")
            @Valid @RequestBody User user) {
        boolean exists = userService.lambdaQuery().eq(User::getName, user.getName()).exists();
        if (exists) {
            throw new BusinessException(ResultCode.USER_NAME_DUPLICATE);
        }
        userService.save(user);
        return Result.success();
    }

    // 2. 根据ID查询用户(GET请求)
    @GetMapping("/{id}")
    @ApiOperation(value = "根据ID查询用户", notes = "传入用户ID,查询单个用户详情,ID不存在则返回用户不存在异常", httpMethod = "GET")
    public Result<User> getUserById(
            @ApiParam(value = "用户ID", required = true, example = "1", notes = "用户主键ID,Long类型")
            @NotNull(message = "用户ID不能为空") @PathVariable Long id) {
        User user = userService.getById(id);
        if (user == null) {
            throw new BusinessException(ResultCode.USER_NOT_EXIST);
        }
        return Result.success(user);
    }

    // 3. 查询所有用户(GET请求)
    @GetMapping("/list")
    @ApiOperation(value = "查询所有用户", notes = "无需传入参数,查询所有用户列表,返回用户集合", httpMethod = "GET")
    public Result<List<User>> getUserList() {
        return Result.success(userService.list());
    }

    // 4. 根据ID修改用户(PUT请求)
    @PutMapping("/update")
    @ApiOperation(value = "根据ID修改用户", notes = "传入用户信息(必须包含ID),修改非null字段,ID不存在则修改失败", httpMethod = "PUT")
    public Result<Void> updateUser(
            @ApiParam(value = "用户信息实体(含ID)", required = true, notes = "必须传入id,其他字段非必填(非null则修改)")
            @Valid @RequestBody User user) {
        userService.updateById(user);
        return Result.success();
    }

    // 5. 根据ID删除用户(DELETE请求)
    @DeleteMapping("/{id}")
    @ApiOperation(value = "根据ID删除用户", notes = "传入用户ID,删除对应用户,ID不存在则删除失败", httpMethod = "DELETE")
    public Result<Void> deleteUser(
            @ApiParam(value = "用户ID", required = true, example = "1", notes = "用户主键ID,Long类型")
            @NotNull(message = "用户ID不能为空") @PathVariable Long id) {
        userService.removeById(id);
        return Result.success();
    }

    // 6. 根据姓名查询用户
    @GetMapping("/list/name")
    @ApiOperation(value = "根据姓名查询用户", notes = "传入用户名,查询该姓名对应的所有用户(支持模糊匹配,本文为精确匹配)", httpMethod = "GET")
    public Result<List<User>> getUserByName(
            @ApiParam(value = "用户名", required = true, example = "张三", notes = "用户名不能为空")
            @NotBlank(message = "用户名不能为空") @RequestParam String name) {
        List<User> userList = userService.lambdaQuery().eq(User::getName, name).list();
        return Result.success(userList);
    }
}

5. 启动项目,访问Swagger文档

  1. 启动Spring Boot项目,确保无报错(依赖下载完成、配置正确);

  2. 访问Knife4j文档页面(默认路径):http://localhost:8081/crud-demo/doc.html(注意替换为你的项目端口和上下文路径);

    • 端口:application.yml中配置的server.port(本文为8081);

    • 上下文路径:server.servlet.context-path(本文为/crud-demo,若无则直接访问http://localhost:8081/doc.html)。

  3. 访问成功后,即可看到接口文档页面,包含「文档信息、接口列表、参数说明、在线调试」等功能(如下图示意,无需截图,按步骤可直接访问)。

6. Swagger在线调试接口(实战)

Swagger支持在线调试接口,无需打开Postman,即可快速验证接口功能,以「新增用户」为例,步骤如下:

  1. 在文档页面,点击左侧「用户管理接口」→ 找到「新增用户」接口 → 点击「调试」按钮;

  2. 在请求参数区域,填写JSON格式的用户信息(根据@ApiModelProperty提示填写),示例:
    { "name": "张三", "age": 22, "email": "zhangsan@163.com" }

  3. 点击「发送」按钮,查看响应结果(统一返回格式),若返回{"code":200,"msg":"操作成功","data":null},说明接口调试成功;

  4. 其他接口(查询、修改、删除)调试步骤类似,根据接口提示传入参数,发送请求,验证响应结果是否符合预期。

7. Swagger文档导出(可选,团队协作常用)

Knife4j支持导出接口文档(HTML、Markdown、Word等格式),便于团队共享,步骤:

文档页面顶部 → 点击「文档下载」→ 选择需要导出的格式(如Markdown)→ 保存到本地,即可生成规范的接口文档。

Swagger集成踩坑点

  • 踩坑1:访问doc.html报404 → 原因:未放行Swagger相关路径(拦截器拦截),或依赖版本不兼容;解决方案:配置拦截器放行Swagger路径,确保Knife4j版本为3.0.3(适配Spring Boot 2.7.x)。

  • 踩坑2:接口文档无接口展示 → 原因:Swagger配置类中,basePackage配置错误(未指向Controller包);解决方案:修改RequestHandlerSelectors.basePackage(“你的Controller包路径”)。

  • 踩坑3:实体类字段说明不显示 → 原因:未给实体类/字段添加@ApiModel、@ApiModelProperty注解;解决方案:补充对应Swagger注解,确保注解配置正确。

三、第二步:Postman 实战,高效调试接口

Swagger适合在线快速调试、查看接口文档,而Postman适合长期开发、批量测试、复杂场景调试(如参数传递、环境切换),两者配合使用,效率翻倍。本文基于前面的用户管理接口,实战Postman的核心用法。

1. Postman准备工作

  1. 下载并安装Postman(官网:https://www.postman.com/,免费注册账号即可使用);

  2. 启动Postman,创建工作空间(如「Spring Boot 接口测试」),用于管理当前项目的所有接口;

  3. 创建接口集合(Collection),命名为「用户管理CRUD接口」,用于归类当前项目的接口(避免接口混乱)。

2. 配置Postman环境(优化,可选)

若项目有多个环境(开发环境、测试环境、生产环境),可配置Postman环境,避免每次调试接口都修改请求地址,步骤:

  1. 点击Postman顶部「环境」→ 点击「Add Environment」;

  2. 环境名称:填写「开发环境」;

  3. 添加环境变量:

    • 变量名:baseUrl,变量值:http://localhost:8081/crud-demo(项目基础路径);

    • 变量名:port,变量值:8081(可选);

  4. 点击「Save」保存环境,使用时选择「开发环境」,接口地址可直接引用变量(如{{baseUrl}}/api/user/add)。

3. Postman调试接口(逐个实战,贴合CRUD)

以下按「新增→查询→修改→删除」的顺序,实战每个接口的调试,确保接口功能正常、统一返回格式正确、异常处理生效。

3.1 调试「新增用户」接口(POST请求)
  1. 在「用户管理CRUD接口」集合下,点击「Add Request」,命名为「新增用户」;

  2. 请求方式:选择POST;

  3. 请求地址:{{baseUrl}}/api/user/add(或直接填写http://localhost:8081/crud-demo/api/user/add);

  4. 请求体(Body):选择raw → 格式选择JSON,填写参数(与Swagger调试一致):
    { "name": "张三", "age": 22, "email": "zhangsan@163.com" }

  5. 点击「Send」发送请求,查看响应结果(符合统一返回格式):
    { "code": 200, "msg": "操作成功", "data": null }

  6. 异常场景测试:故意填写错误参数(如name为空、age为负数),发送请求,验证全局异常处理是否生效,响应示例(参数错误):
    { "code": 400, "msg": "用户名不能为空", "data": null }

3.2 调试「根据ID查询用户」接口(GET请求)
  1. 新建请求,命名为「根据ID查询用户」;

  2. 请求方式:选择GET;

  3. 请求地址:{{baseUrl}}/api/user/1(1为新增用户的ID,替换为你实际新增的ID);

  4. 无需填写请求体(GET请求参数在地址栏),点击「Send」,响应结果(携带用户数据):
    { "code": 200, "msg": "操作成功", "data": { "id": 1, "name": "张三", "age": 22, "email": "zhangsan@163.com", "createTime": "2024-05-20 10:30:00", "updateTime": "2024-05-20 10:30:00" } }

  5. 异常场景测试:查询不存在的ID(如999),响应结果(业务异常):
    { "code": 1001, "msg": "用户不存在", "data": null }

3.3 调试「查询所有用户」接口(GET请求)
  1. 新建请求,命名为「查询所有用户」;

  2. 请求方式:GET;

  3. 请求地址:{{baseUrl}}/api/user/list;

  4. 点击「Send」,响应结果(返回用户列表):

{
 "code": 200,
 "msg": "操作成功",
 "data": [
   {
     "id": 1,
     "name": "张三",
     "age": 22,
     "email": "zhangsan@163.com",
     "createTime": "2024-05-20 10:30:00",
     "updateTime": "2024-05-20 10:30:00"
   }
 ]
}
3.4 调试「根据ID修改用户」接口(PUT请求)
  1. 新建请求,命名为「根据ID修改用户」;

  2. 请求方式:PUT;

  3. 请求地址:{{baseUrl}}/api/user/update;

  4. 请求体:raw → JSON,填写参数(必须包含ID,修改需要更新的字段):

{
  "id": 1,
  "age": 23,
  "email": "zhangsan_update@163.com"
}
  1. 点击「Send」,响应结果:
{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
  1. 验证:再次调用「根据ID查询用户」接口,查看用户年龄和邮箱是否已更新。
3.5 调试「根据ID删除用户」接口(DELETE请求)
  1. 新建请求,命名为「根据ID删除用户」;

  2. 请求方式:DELETE;

  3. 请求地址:{{baseUrl}}/api/user/1(ID为需要删除的用户ID);

  4. 点击「Send」,响应结果:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
  1. 验证:调用「查询所有用户」接口,查看该用户是否已被删除。

4. Postman高级用法(提升效率,实战必备)

4.1 接口参数传递(关联接口,无需手动输入)

场景:新增用户后,需要用新增的ID查询/修改/删除,无需手动记录ID,可通过Postman的「环境变量」传递参数,步骤:

  1. 调试「新增用户」接口时,在响应结果中,提取用户ID(需要项目新增后回显ID,本文已实现);

  2. 在「新增用户」请求的「Tests」标签页,编写脚本,将ID存入环境变量:

// 解析响应JSON
var responseJson = pm.response.json();
// 将新增的用户ID存入环境变量(变量名:userId)
pm.environment.set("userId", responseJson.data.id);
  1. 发送「新增用户」请求后,环境变量userId会自动赋值;

  2. 后续接口(查询、修改、删除)的地址可直接引用该变量:{{baseUrl}}/api/user/{{userId}}。

4.2 批量测试接口(Collection Runner)

场景:接口修改后,需要批量验证所有接口是否正常,无需逐个点击发送,步骤:

  1. 整理好所有接口(确保接口顺序正确,如新增→查询→修改→删除);

  2. 选中「用户管理CRUD接口」集合,点击右侧「Runner」按钮;

  3. 选择环境(如开发环境),设置迭代次数(如1次),点击「Run 用户管理CRUD接口」;

  4. Postman会自动按顺序执行所有接口,执行完成后,显示每个接口的执行结果(成功/失败),便于快速排查问题。

4.3 接口导出/导入(团队协作)

场景:将本地调试好的接口,分享给团队成员,步骤:

  • 导出:选中集合 → 点击「…」→ 选择「Export」→ 选择导出格式(推荐Collection v2.1)→ 保存文件;

  • 导入:团队成员打开Postman → 点击「Import」→ 选择导出的文件 → 导入成功,即可直接使用接口。

Postman调试踩坑点

  • 踩坑1:POST/PUT请求无响应或参数校验失败 → 原因:请求体格式错误(未选择JSON),或参数缺失/格式不正确;解决方案:确保请求体为raw→JSON格式,参数与接口要求一致(参考Swagger文档)。

  • 踩坑2:GET请求参数传递错误 → 原因:将参数写在请求体中(GET请求参数应在地址栏或Params标签页);解决方案:在Params标签页填写GET请求参数,或直接拼接在地址栏。

  • 踩坑3:环境变量引用失败 → 原因:未选择对应的环境,或变量名拼写错误;解决方案:选择正确的环境,核对变量名(区分大小写)。

四、Swagger + Postman 配合使用最佳实践

实际开发中,两者配合使用,可最大化提升接口开发和测试效率,推荐流程:

  1. 开发接口时,同步添加Swagger注解,启动项目后,通过Swagger文档查看接口参数、返回格式,快速在线调试接口(验证接口基本功能);

  2. 接口功能初步验证通过后,在Postman中创建对应的接口,配置环境变量、参数传递脚本,完善接口调试(覆盖异常场景、边界值测试);

  3. 接口迭代修改后,先通过Swagger快速验证修改后的功能,再用Postman批量测试,确保所有相关接口正常;

  4. 开发完成后,通过Knife4j导出接口文档,分享给前端开发人员;通过Postman导出接口,分享给测试人员,提升团队协作效率。

补充:生产环境建议关闭Swagger(修改SwaggerConfig中.enable(false)),避免暴露接口信息,增加系统安全风险;仅在开发、测试环境开启Swagger。

五、总结

本文基于「Spring Boot + MyBatis-Plus」实战项目,完整实现了 Swagger 接口文档自动生成 + Postman 接口调试,核心要点总结:

  • Swagger(Knife4j):通过依赖导入+简单配置,自动扫描接口,生成规范文档,支持在线调试、文档导出,解决“手动写文档繁琐”“前后端对接分歧”的问题;

  • Postman:通过环境配置、参数传递、批量测试等功能,高效调试接口,覆盖正常/异常场景,确保接口功能符合预期,提升开发和测试效率;

  • 无缝衔接:两者均适配前文实现的「统一返回格式」和「全局异常处理」,确保接口文档展示清晰、调试结果规范,贴合企业实际开发场景;

  • 避坑关键:Swagger注意配置接口扫描路径、放行相关地址;Postman注意请求格式、参数传递方式,两者配合使用,可大幅提升接口开发效率。

掌握这套实战方案,能让你在Spring Boot接口开发中,快速完成「文档生成→接口调试→团队共享」全流程,避免重复工作,同时规范接口开发,降低前后端对接和问题排查成本。后续可根据项目需求,扩展Swagger的权限控制、Postman的自动化测试脚本等高级功能。

IDEA插件RestfulToolKit实战:5分钟搞定Spring Boot接口测试(附快捷键大全) 本文详细介绍了IDEA插件RestfulToolKit在Spring Boot接口测试中的高效应用。通过集成接口文档查看、请求发送和响应调试功能,该插件显著提升开发效率,支持快捷键操作和智能填充,5分钟内即可完成接口测试。特别适合Java开发者优化工作流,实现编码即测试的无缝体验。 阅读详情

相关推荐

Spring Boot集成Swagger/OpenAPI:告别文档地狱的实战指南

在微服务与前后端分离架构中,API接口的清晰定义与高效协作是核心挑战。API文档作为前后端契约,其维护成本与准确性直接影响开发效率。OpenAPI规范(原Swagger)通过一套标准化的描述格式,实现了API的机器可读与自描述,其核心价值在于将文档与代码强绑定,确保实时同步。基于此规范的工具生态,如Swagger UI,能自动生成交互式文档,支持在线调试;Swagger Codegen可生成多语言客户端SDK,提升集成效率。在Java生态中,Spring Boot项目通过集成Springdoc-OpenAP

weixin_30813225的博客 430

Swagger和postman

接口规范Swagger 1.为什么需要swagger 1)接口测试人员要通过接口描述测试接口 --黑盒测试 2)前端开发人员要通过接口描述使用接口. 2.swagger的作用 通过后端代码产生能够让前台开发或测试人员能够看懂的文档 3.Swagger使用步骤 3.1在crmyang_web模块中引入相关jar包 <!-- swagger引入包--> <depend...

EvilKingyhq的博客 4490

Postman通Swagger不通?详解API测试差异与排查指南

在API开发与测试中,理解不同工具间的核心差异至关重要。HTTP请求的构建涉及请求头、请求体、参数序列化等多个技术环节,其标准化程度直接影响接口的兼容性与健壮性。从技术原理上看,独立客户端(如Postman)允许手动精细控制每个请求细节,而基于代码注解动态生成的文档化测试界面(如Swagger UI)则遵循一套标准化的推断逻辑。这种“显式指定”与“隐式推断”的差异,正是导致同一接口在不同工具上表现迥异的技术根源。其技术价值在于推动开发者设计出更规范、契约更清晰的API,减少对特定客户端的依赖。典型的应用场景

weixin_33721344的博客 351

简单步骤:在 Postman 中导入 Swagger 文档

访问示例项目,手动下载文件至本地设备,即可得到 API 定义的JSON格式文档。Swagger 文档若发生变更,只需下载最新的OpenAPI文件并重新导入至 Postman 即可更新请求集合。对于那些想要体验中文界面并寻找更全面功能的工具的开发人员,Apifox 是一种极好的选择。让我们深入了解一下。Apifox是一个比 Postman 功能更为全面的接口测试和文档生成工具。它集成了 API 设计、测试、Mock 服务器和性能测试功能。此外,Apifox 还支持http。

YLF123456789000的博客 2228

Spring Boot接口文档工具选型:Swagger与JApiDocs深度对比

在前后端分离与微服务架构中,接口文档是团队协作的基石,却常常因维护成本过高而迅速腐烂,导致联调返工和沟通低效。为解决这一痛点,业界主流方案依赖接口文档工具,从已有代码中自动抽取接口定义,确保文档与实现同步。Swagger采用注解驱动,通过在代码中植入大量元数据,在运行时生成OpenAPI描述,提供丰富展示和在线调试能力,但代码侵入性强,且随Spring Boot版本升级易产生兼容性风险。JApiDocs则走注释驱动路线,直接解析Javadoc,零侵入生成静态HTML文档,构建期即可产出,轻量且易于部署。两者

weixin_34378969的博客 398

Spring Boot集成Swagger 3.0:自动生成API文档与安全配置实战

在前后端分离架构中,API文档是团队协作的核心纽带。OpenAPI规范定义了RESTful API的标准描述格式,而Swagger作为其生态工具,能够基于代码注解自动生成实时、交互式的文档,解决了传统手动维护文档的滞后性问题。通过集成Swagger,开发者可以显著提升接口定义的准确性和团队协作效率,尤其适用于微服务架构和敏捷开发场景。本文以Spring Boot项目为例,详细讲解如何集成Swagger 3.0,涵盖依赖配置、注解使用、模块分组等核心实践,并重点探讨生产环境下的安全策略,如通过Spring P

weixin_34258838的博客 334

Postman如何做接口测试:如何导入 swagger 接口文档

在使用 postman 做接口测试过程中,测试工程师会往界面中填入非常多的参数,包括 url 地址,请求方法,消息头和消息体等一系列数据,在请求参数比较多的情况下非常花时间。 我们可以使用 postman 的文档导入功能,直接导入 swagger 这样的开放式文档,postman 会根据文档内容以及参数限制自动生成请求相关数据,这样就可以节省大量手工填写参数的时间了。 而且导入 swagger 文档的步骤只有 2 步,非常方便。 首先,第一步,打开 swagger 文档的地址,点击 export ,导

5968

springboot测试工具

最适合测试Spring Boot REST API的工具 Wisdom RESTClient https://github.com/Wisdom-Projects/rest-client

PostMan与Swagger联合使用

postman配置环境流程 第一步:复制swagger的<json>格式链接到postman 1.打开postman 2.点击左上方的小人同行 (import) 3.点击Link 4.把链接粘贴<Enter a URL>标签的下方 5.点击<Continue> 6.生成的项目名称可以改成中文的名称 点击右下方的<import>(提示:可能加载稍慢,静候) 点击cancel返回上一步 7.点击<Clo...

m0_59707491的博客 2749

机械臂视觉抓取避坑指南:如何正确计算手眼标定矩阵(附Numpy代码)

本文详细解析了机械臂视觉抓取中手眼标定矩阵的计算方法,特别针对'眼在手上'配置下的常见错误提供了解决方案。通过Numpy代码示例和坐标转换原理,帮助开发者避免矩阵计算错误和坐标转换偏差,提升工业自动化系统的精度和效率。

weixin_29081703的博客 243

三维重建之条纹投影结构光(一)

该系列为条纹投影结构光学习笔记,一共分为四篇。第一篇记录文献阅读的笔记,对重要知识点进行摘录介绍。 本篇以理论知识推导为主,主要从以下三个方面进行介绍,首先介绍条纹投影的三角测量原理;然后介绍相位主值的求解和相位展开;最后介绍相位和高度的模型,即相高模型。本篇博文不涉及具体的代码实现。 条纹投影结构光测量原理 ...

beyond951的博客 3万+

Swagger和postman总结使用手册

Swagger简单上手使用步骤(搭配Springboot)

Peter_Pan2020的博客 676

国税局发票查验中英文验证码识别,识别率95.2%

国税验证码识别方法介绍

onedayismyway的博客 3134

SpringBoot 3.x 整合swagger

对于SpringBoot而言,Swagger的作用是通过后端SpringBoot代码快速生成接口文档,方便测试接口以及前端使用。二、基本使用由于springfox不适用于SpringBoot3.x,故使用Springdoc进行代替。1. 引入依赖2. 其它相关依赖-- 让响应结果更美观 -->

2202_76007821的博客 4778

Ubuntu22.04下ROS2与PX4仿真环境搭建全流程解析

本文详细解析了在Ubuntu22.04系统下搭建ROS2与PX4仿真环境的全流程,包括系统准备、ROS2 Humble安装、PX4飞控环境部署、ROS2与PX4通信桥梁搭建等关键步骤。针对常见问题提供了解决方案,并分享了性能优化和开发调试技巧,帮助开发者快速构建无人机仿真开发环境。

weixin_29248653的博客 607

如何将rvt(BIM)转换为点云格式

1、为什么将BIM转换为点云格式? 如何使设计BIM与真实场景进行配准,分析在建、未建、已建构建的情况,真实场景是通过点云生产的,和点云配准需要相同的格式。 2、如何转换? 实用工具revit,转换过程如下图,这样就可以转换成三角网格形式。 3、FBX还需要进行一次转换,即转换成点云常用的类型,如bin\ply\pcd等格式。 需要软件cloudcompare.exe,软件下载地址百度云 链接:https://pan.baidu.com/s/1pflcKNc04loBnS1yKR39hw 提取码:obaf

self_Name_的博客 4489

springboot从零入门之接口测试!

接口测试就是测试系统组件间的接口,检测外部系统与系统之间以及内部各个子系统之间的交互点,重点是检查数据的交换、传递和控制管理过程以及系统间的相互逻辑依赖关系等。对于Web开发来说,接口测试主要是测试对外暴露的接口,测试不同情况下的入参对应的出参信息,从而判断接口是否符合或满足相应的功能性和安全性要求。开发人员在完成接口的功能之后需要进行自测,自测完成后,测试人员再对接口进行自动化测试,包括白盒测试、黑盒测试和压力测试等。

IT_1024的博客 1105

Transformer实战——Transformer自编码模型

自编码模型依赖于原始 Transformer 编码器,并且在解决分类问题时非常高效。除了 BERT 外,还有许多流行的自编码模型,在本节中,我们将一些除 BERT 外的自编码模型,这些模型的目标是通过优化预训练过程、增加层数或头数、改善数据质量、设计更好的目标函数等,来在下游任务上取得更好的表现。这些改进大致可以分为两个方面,更好的架构设计选择和预训练控制。

盼小辉丶的博客 9292

【Spring】SpringBoot实现接口测试的多种方式

适合测试Controller接口,模拟HTTP请求。(已在你的pom.xml中):</</</</适合测试真实HTTP请求(需要启动嵌入式服务器)。轻量级测试,只加载Controller相关Bean。适合微服务场景,定义接口契约。</</</</虽然不属于自动化测试,但开发阶段常用。

2301_78725423的博客 1989

3D结构光 vs TOF——手机厂商为何选择TOF方案?

3D视觉感知技术路线分析:结构光与TOF对比 3D视觉感知领域存在结构光和TOF两大主流技术。结构光基于三角定位法,精度高(毫米级)但工作距离短(<1.5米),适合人脸识别等近距离场景;TOF通过测量光脉冲飞行时间计算深度,精度中等(厘米级)但工作距离长(0.5-5米+),更适合AR导航等中远距离应用。手机厂商选型时考虑:前置认证选择结构光(如苹果FaceID),后置场景倾向TOF(安卓阵营),因后者更适配全面屏设计、环境适应性强且成本优势明显。两种技术互补共存,共同推动3D感知应用发展。

致力于lidar应用开发 111

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring Boot 实战:打造高效RESTful API的通关秘籍

本文详细介绍了使用SpringBoot开发RESTful API的全过程。首先讲解了环境搭建和项目创建,包括JDK、IDE和Maven的配置。然后通过用户管理系统示例,展示了从需求分析、数据库设计到编码实现的全流程,包括实体类创建、数据访问层、服务层和控制层的开发。接着介绍了功能测试方法,包括Postman接口测试和JUnit单元测试编写。最后提出了项目优化方案,包括异常处理、日志记录和Swagger接口文档生成。

大雨淅淅的博客 1012

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring boot 整合 Swagger使用swagger-bootstrap-ui

记录一下 Spring boot 整合增强版的 swagger-ui, 有了这个,基本可以省去postman调用了,极其方便。

腾蛟起凤吕学士 1284

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Swagger入门

目录 1.为什么使用Swagger2 2.Swagger2 的优点 3.快速上手 SpringBoot 集成 Swagger2 3.1 导入依赖 3.2 编写配置文件 3.3 控制层 3.4 测试运行 http://localhost:8080/swagger-ui.html 4. Swagger2注解详解 4.1 @Api :请求类的说明 4.2 @ApiOperation...

liang博客 1097

spring boot 整合 swagger自动生成接口文档,搬砖都快乐了~

spring boot 整合 swagger 自动生成接口文档,搬砖都快乐了~

FightingITPanda的博客 1444

spring-boot整合swagger

spring-boot整合swagger 平时开发过程中,用的到测试工具有postman,浏览器URL地址,swagger等测试工具,但个人觉得相比起来,swagger的页面和操作简便性较高一些(针对于后端人员测试接口可行性) 那我们就来说说swagger怎么配置吧 1、导入maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2&lt

theRengar的博客 117
上一篇: Spring Boot 统一返回格式 + 全局异常处理(实战版)
下一篇: Spring Boot 项目打包成 JAR 并部署运行(实战完整版)
码客日记
博客等级 码龄6年 149粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码客日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值