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

Spring Boot中如何在Swagger隐藏字段但通过Spec/Jolt文件赋值?

可行解决方案

针对你的需求,这里提供两种适配不同Swagger版本的有效方法:

方法一:使用OpenAPI 3.x(springdoc-openapi)注解

如果你的项目使用的是springdoc-openapi(当前Spring生态推荐的Swagger实现),可以结合@Schema和@JsonProperty注解实现需求:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Plan
{
  @NotBlank
  private String param1;
  
  @Schema(hidden = true) // 让Swagger UI完全隐藏该字段
  @JsonProperty // 确保Jackson不会忽略此字段,Jolt可正常赋值
  private String param2;
}
  • @Schema(hidden=true)会在Swagger文档和UI中彻底隐藏param2,不会出现在请求/响应模型里
  • @JsonProperty保证Jackson仍能正常处理该字段的序列化与反序列化,Jolt映射时可以正常给param2赋值,不会出现null的情况

方法二:Springfox(Swagger 2.x)自定义插件

如果你的项目还在使用旧版Springfox(Swagger 2.x),且常规注解无效,可以通过自定义Swagger插件来过滤字段:

  1. 创建一个自定义插件类:
@Component
public class HideParam2Plugin implements ModelPropertyBuilderPlugin {

    @Override
    public boolean supports(DocumentationType documentationType) {
        return DocumentationType.SWAGGER_2.equals(documentationType);
    }

    @Override
    public void apply(ModelPropertyContext context) {
        // 精准匹配Plan类的param2字段
        if ("param2".equals(context.getBeanPropertyDefinition().get().getName())
                && Plan.class.equals(context.getBeanPropertyDefinition().get().getDeclaringClass())) {
            context.getBuilder().hidden(true);
        }
    }
}
  1. 确保该类被Spring容器扫描到(比如放在@ComponentScan的包下)

这个插件会在Swagger构建模型元数据时,主动将Plan类的param2字段标记为隐藏,同时不影响Jackson对该字段的处理,Jolt可以正常赋值。

关键注意点

不要使用@JsonIgnore,它会让Jackson完全忽略该字段,导致Jolt无法映射赋值;我们要做的是仅在Swagger层面隐藏字段,保留Jackson对字段的正常处理,这样就能同时满足两个核心需求。

内容的提问来源于stack exchange,提问作者Abdul Ahad Akram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:20:14