智享技巧屋
第二套高阶模板 · 更大气的阅读体验

Swagger文档参数校验标注实战技巧

发布时间:2025-12-23 13:51:21 阅读:162 次

在开发接口时,光写清楚接口功能还不够,ref="/tag/419/" style="color:#2B406D;font-weight:bold;">参数怎么填、哪些必传、格式要求是什么,都得让调用者一目了然。Swagger 就是干这个的——它能自动生成接口文档,但默认展示的信息太基础。这时候就得靠参数校验标注,把规则清清楚楚标出来。

为什么要加参数校验标注?

想象一下你同事第一次调你的用户注册接口,看到一堆字段:username、email、password……他哪知道哪个不能空?密码要几位?邮箱格式有没有限制?如果文档里没写,就得翻代码或者挨个试错。加上校验标注后,Swagger 页面上直接显示“此字段必填”“最小长度8位”,沟通成本立马下降。

Spring Boot 中如何配置

如果你用的是 Spring Boot + Springfox 或 Springdoc,可以通过注解把校验规则暴露到 Swagger UI 上。比如用 @NotNull@NotBlank@Size 这些 Bean Validation 注解,再配合 Swagger 的 @Parameter@Schema,就能实现自动提示。

public ResponseEntity<User> createUser(@RequestBody @Valid CreateUserRequest request) {
    // 业务逻辑
}

其中 CreateUserRequest 类:

public class CreateUserRequest {

    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 20, message = "用户名长度应在3-20之间")
    @Schema(description = "用户名", example = "zhangsan", requiredMode = Schema.RequiredMode.REQUIRED)
    private String username;

    @Email(message = "邮箱格式不正确")
    @Schema(description = "用户邮箱", example = "zhangsan@example.com")
    private String email;

    @NotBlank
    @Size(min = 8, message = "密码至少8位")
    @Schema(description = "登录密码", requiredMode = Schema.RequiredMode.REQUIRED)
    private String password;

    // getter/setter 省略
}

效果什么样?

当你启动项目,打开 Swagger UI(通常是 /swagger-ui.html),点进这个接口,会看到每个字段都有描述、示例值,必填项会被星号标记,鼠标悬停还能看到长度、格式等限制。前端同事一看就知道该怎么填,测试也不用反复确认规则。

常见标注组合建议

  • 字符串必填:@NotBlank + @Schema(requiredMode = REQUIRED)
  • 数值范围:@Min(1) + @Max(100) + @Schema(description = "页码,1-100")
  • 日期格式:@Pattern(regexp = "^\d{4}-\d{2}-\d{2}$") + 示例说明
  • 枚举类型:在 @Schema 里加 enums 描述可选值

别忘了开启验证

有些项目默认不触发参数校验,需要确保控制器加了 @Validated,方法参数用了 @Valid,否则即使写了注解,后端不会主动校验,Swagger 显示的规则也就成了摆设。

小细节提升体验

给每个字段加上 example 值特别有用。比如手机号写个 13800138000,时间写个 2025-04-05,别人调试时可以直接复制粘贴,省得瞎猜格式。团队协作时,这种细节最能减少摩擦。