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插件来过滤字段:
- 创建一个自定义插件类:
@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); } } }
- 确保该类被Spring容器扫描到(比如放在@ComponentScan的包下)
这个插件会在Swagger构建模型元数据时,主动将Plan类的param2字段标记为隐藏,同时不影响Jackson对该字段的处理,Jolt可以正常赋值。
关键注意点
不要使用@JsonIgnore,它会让Jackson完全忽略该字段,导致Jolt无法映射赋值;我们要做的是仅在Swagger层面隐藏字段,保留Jackson对字段的正常处理,这样就能同时满足两个核心需求。
内容的提问来源于stack exchange,提问作者Abdul Ahad Akram
相关产品推荐
相关产品推荐

