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

Spring Boot中如何在Swagger文档中隐藏Student类的id参数?

解决方案:隐藏Swagger文档中的Student类id字段

针对你遇到的@Schema(hidden = true)和@Parameter(hidden = true)注解无效的问题,可根据你使用的Swagger版本和场景,尝试以下几种方案:

1. 确认注解与Swagger版本匹配

Swagger 2(Springfox)和OpenAPI 3(Springdoc)使用的注解不同,别混用:

  • 如果用Springdoc OpenAPI(主流新版本):使用io.swagger.v3.oas.annotations.media.Schema注解,直接标注在id字段上:
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDate;

public class Student {
    @Schema(hidden = true)
    private Long id;
    
    private String name;
    private String email;
    private LocalDate dob;
    private Integer age;

    // Getter、Setter方法
}
  • 如果用Springfox Swagger 2:使用springfox.documentation.annotations.ApiModelProperty注解:
import springfox.documentation.annotations.ApiModelProperty;
import java.time.LocalDate;

public class Student {
    @ApiModelProperty(hidden = true)
    private Long id;
    
    private String name;
    private String email;
    private LocalDate dob;
    private Integer age;

    // Getter、Setter方法
}

2. 尝试将注解标注在Getter方法上

部分场景下,Swagger会通过Getter方法识别字段,若字段上的注解无效,可将注解移到id的Getter方法上:

@Schema(hidden = true) // 或@ApiModelProperty(hidden = true)
public Long getId() {
    return id;
}

3. 自定义模型过滤规则(全局生效)

如果以上方法都无效,可通过自定义配置过滤掉Student类的id字段:

Springdoc OpenAPI配置

import org.springdoc.core.customizers.ModelBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
import java.util.stream.Collectors;

@Configuration
public class OpenApiConfig {
    @Bean
    public ModelBuilderCustomizer modelBuilderCustomizer() {
        return (modelBuilder, modelContext) -> {
            if (Student.class.equals(modelContext.getType())) {
                // 过滤掉id属性
                Map<String, Object> filteredProps = modelBuilder.getProperties().entrySet().stream()
                        .filter(entry -> !"id".equals(entry.getKey()))
                        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
                modelBuilder.properties(filteredProps);
            }
        };
    }
}

Springfox Swagger 2配置

import com.fasterxml.classmate.TypeResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ModelBuilder;
import springfox.documentation.schema.ModelProperty;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.schema.ModelBuilderPlugin;
import springfox.documentation.spi.schema.contexts.ModelContext;
import java.util.Map;
import java.util.stream.Collectors;

@Configuration
public class SwaggerConfig {
    @Bean
    public ModelBuilderPlugin hideIdFieldPlugin(TypeResolver typeResolver) {
        return new ModelBuilderPlugin() {
            @Override
            public void apply(ModelContext context) {
                if (Student.class.equals(context.getType().getErasedType())) {
                    ModelBuilder builder = context.getBuilder();
                    Map<String, ModelProperty> filteredProps = builder.build().getProperties().entrySet().stream()
                            .filter(entry -> !"id".equals(entry.getKey()))
                            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
                    builder.properties(filteredProps);
                }
            }

            @Override
            public boolean supports(DocumentationType delimiter) {
                return true;
            }
        };
    }
}

完成以上配置后,重启服务,Swagger文档中就只会展示你期望的name、email、dob、age四个字段了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:01:42