You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何注解DTO以使其结构正常显示在SwaggerUI的Schema区域

核心配置修改方案

你遇到的问题是Swagger3(OpenAPI3)对请求体类型识别异常,核心错误有两处:

  1. @Operation下的requestBody的@Content注解未显式指定schema属性,仅配置示例会被Swagger默认识别为字符串类型的请求体
  2. 不需要在方法的@RequestBody参数上额外加@Parameter注解,该注解是给路径参数、查询参数等非请求体参数使用的,加在这里会干扰Swagger的类型识别

控制器修改示例
@RequestMapping(value = "/{myPathVar}", method = RequestMethod.POST)
@Operation(summary = "Create something.", 
    parameters = { @Parameter(in = ParameterIn.PATH, name = "myPathVar", description = "Some path variable. Swagger uses this description.") },             
    requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
        description = "My description here.", 
        content = @Content(
            // 新增这行指定请求体对应的DTO类
            schema = @Schema(implementation = MyDto.class),
            examples = @ExampleObject("{\"A\" : \"a\",\"B\" : {\"b\" : \"foo\", \"bb\" : \"bar\"}}"))))
@ApiResponse(content = @Content(schema = @Schema(implementation = MyReturningType.class)))
public MyReturningType doSomethingCool(
    @Parameter(description = "Some description Swagger ignores.", example = "123") @PathVariable(value = "myPathVar") int myPathVar,
    // 删掉原本加在这里的@Parameter注解,仅保留@RequestBody
    @RequestBody MyDto dto) {
    // do something cool
}

DTO类配置示例
public class MyDto {
    // 字段上添加@Schema注解配置描述、示例等信息
    @Schema(description = "测试整数字段", example = "100")
    private int someInt;
    @Schema(description = "测试字符串字段", example = "测试内容")
    private String someString;
    @Schema(description = "测试通用对象字段")
    private Object someObject;

    // 必须添加所有字段的getter、setter方法,否则Swagger无法识别字段结构
    public int getSomeInt() { return someInt; }
    public void setSomeInt(int someInt) { this.someInt = someInt; }
    public String getSomeString() { return someString; }
    public void setSomeString(String someString) { this.someString = someString; }
    public Object getSomeObject() { return someObject; }
    public void setSomeObject(Object someObject) { this.someObject = someObject; }
}

验证要点
  • 确保项目使用的是OpenAPI3(springdoc)相关依赖,而非旧版Swagger2依赖
  • 启动项目后打开SwaggerUI,找到对应接口,请求体的Schema区域就会自动展示MyDto的所有字段结构、描述和示例

内容的提问来源于stack exchange,提问作者81n0n4b1bK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:15:03