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

SpringDoc @ApiResponses如何配置@Schema定义List<MyClass>返回对象

解决方法

你使用的springdoc-openapi 1.5.x版本遵循OpenAPI 3规范,针对集合类型的返回值,不需要直接编写不合法的泛型类字面量,使用@ArraySchema注解指定集合元素类型即可,正确配置如下:

@Operation(....)
@ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "successful operation",
                content = { @Content(mediaType = "application/json",
                        // 用array属性指定返回值是数组,schema指定数组元素类型
                        array = @ArraySchema(schema = @Schema(implementation = MyClass.class)) )
        }),
        @ApiResponse(...),
        @ApiResponse(...)
})
@GetMapping(value = "/aaa", produces = MediaType.APPLICATION_JSON_VALUE)
public List<MyClass> getAaa(...)
{
    return ...
}
原理解释

Java泛型存在编译期类型擦除,List<MyClass>.class本身就是不符合Java语法的写法,无法通过编译。OpenAPI 3规范专门提供了@ArraySchema注解用于描述数组/集合类型的结构,只需要在注解中指定集合内部元素的实现类,Swagger UI就会自动识别返回值为List<MyClass>类型。

可选替代方案

如果不想使用@ArraySchema,也可以自定义一个继承集合类的空类作为类型标识:

// 自定义类继承ArrayList,指定泛型为MyClass
public class MyClassList extends ArrayList<MyClass> {}

之后直接在@Schema中引用该类即可:

schema = @Schema(implementation = MyClassList.class)

该方案可以实现同样的效果,但会增加多余的自定义类,更推荐使用第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:04