SpringDoc/Swagger展开端点致浏览器标签页卡顿问题求助
解决Swagger加载卡顿:移除复杂XML Schema但保留强类型参数
针对你的问题,这里提供两种可行方案,既能避免Swagger生成ComplexStructure的复杂Schema导致页面卡顿,又不需要将参数/返回类型替换为String:
方案1:直接通过注解隐藏Schema
在ComplexStructure类上添加@Schema(hidden = true)注解,让Swagger跳过该类的Schema生成:
import io.swagger.v3.oas.annotations.media.Schema; @Schema(hidden = true) public class ComplexStructure { // 原有字段、getter/setter及业务逻辑 }
如果只想针对当前端点隐藏,也可以在方法的参数和返回类型上单独标记:
@Operation(summary = "Sample Request", operationId = "sampleReq", description = "Data Structure Response", responses = { @ApiResponse(responseCode = "200", description = "Data Structure response with calculations ") }) @PostMapping(consumes = { MediaType.APPLICATION_XML_VALUE }, produces = { MediaType.APPLICATION_XML_VALUE }) public ResponseEntity<@Schema(hidden = true) ComplexStructure> calculate( @RequestBody @Schema(hidden = true) ComplexStructure request) { // ... }
配置后Swagger页面只会显示参数/返回值的类型名称,不会展开复杂的XML结构,直接解决加载卡顿问题。
方案2:通过Swagger全局配置过滤Schema
如果使用Springfox(Swagger 2.x),可以在配置类中自定义Schema过滤器,排除ComplexStructure的Schema生成:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.SchemaFilter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("your.service.package")) .paths(PathSelectors.any()) .build() .schemaFilter((typeName, context) -> !typeName.getSimpleName().equals("ComplexStructure")); } }
如果使用SpringDoc(OpenAPI 3.x),则通过OpenAPI配置类隐藏指定Schema:
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.media.Schema; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringDocConfig { @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .components(new Components() .addSchemas("ComplexStructure", new Schema<>().hidden(true))); } }
两种方案都能保留ComplexStructure作为强类型参数和返回值,保证Spring的XML序列化/反序列化正常工作,同时解决Swagger页面加载卡顿的问题。
内容的提问来源于stack exchange,提问作者Ezekiel
相关产品推荐
相关产品推荐

