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

Spring MVC中如何让Swagger UI隐藏RequestBody包装类展示

解决Swagger UI隐藏包装类、仅展示MyClass数组结构的问题

以下是几种可行的实现方案:

方案1:通过@Schema注解直接指定请求体类型

修改接口方法的@RequestBody参数注解,强制Swagger将请求体识别为MyClass数组,同时隐藏包装类的单独定义:

步骤1:修改接口方法

@PostMapping("/api/create")
public void create(
    @ApiParam(required = true)
    @RequestBody 
    @Schema(type = "array", implementation = MyClass.class)
    MyClassWrapper wrapped) {
    // 业务逻辑
}

步骤2:修改包装类的@Schema注解

@Builder(toBuilder = true)
@Data
@Jacksonized
@Schema(name = "MyClassWrapper", hidden = true)
public class MyClassWrapper
{
   @ArraySchema(schema = @Schema(implementation = MyClass.class))
   private List<MyClass> myClasses;
}

方案2:自定义Swagger模型转换器(全局生效)

如果有多个类似包装类需要处理,可以实现ModelConverter接口,在Swagger构建模型时自动将包装类替换为内部的数组类型:

@Component
public class WrapperModelConverter implements ModelConverter {
    @Override
    public Schema resolve(ModelConverterContext context, AnnotatedType type, Iterator<ModelConverter> chain) {
        // 匹配目标包装类
        if (type.getType() == MyClassWrapper.class) {
            // 构建MyClass数组的Schema
            Schema myClassSchema = context.resolve(AnnotatedType.of(MyClass.class));
            return new ArraySchema().items(myClassSchema);
        }
        return chain.hasNext() ? chain.next().resolve(context, type, chain) : null;
    }
}

方案3:使用@ApiImplicitParam指定请求体结构

直接在接口方法上通过@ApiImplicitParam声明请求体为MyClass数组,忽略包装类的展示:

@PostMapping("/api/create")
@ApiImplicitParams({
    @ApiImplicitParam(
        name = "body",
        required = true,
        dataType = "MyClass",
        paramType = "body",
        allowMultiple = true
    )
})
public void create(@RequestBody MyClassWrapper wrapped) {
    // 业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:04:58