diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java index d4bf2a9c47..10a2be4343 100755 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java @@ -36,6 +36,7 @@ public class SpecFilter { + private OpenAPI _ctxOpenAPI; public OpenAPI filter(OpenAPI openAPI, OpenAPISpecFilter filter, Map> params, Map cookies, Map> headers) { OpenAPI filteredOpenAPI = filterOpenAPI(filter, openAPI, params, cookies, headers); if (filteredOpenAPI == null) { @@ -399,6 +400,26 @@ private void addPathItemSchemaRef(PathItem pathItem, Set referencedDefin } private void addApiResponseSchemaRef(ApiResponse response, Set referencedDefinitions) { + if (response == null) return; + String respRef = response.get$ref(); + if (respRef != null && !respRef.isEmpty() && _ctxOpenAPI != null) { + String name = (String) RefUtils.extractSimpleName(respRef).getLeft(); + referencedDefinitions.add(name); + Components comps = _ctxOpenAPI.getComponents(); + ApiResponse resolved = (comps != null && comps.getResponses() != null) + ? comps.getResponses().get(name) + : null; + if (resolved != null) { + if (resolved.getHeaders() != null) { + for (Header h : resolved.getHeaders().values()) { + addHeaderSchemaRef(h, referencedDefinitions); + } + } + addContentSchemaRef(resolved.getContent(), referencedDefinitions); + } + return; + } + if (response.getHeaders() != null) { for (String keyHeaders : response.getHeaders().keySet()) { Header header = response.getHeaders().get(keyHeaders); @@ -469,7 +490,7 @@ private void addComponentsSchemaRef(Components components, Set reference } protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) { - + this._ctxOpenAPI = openApi; if (openApi == null || openApi.getComponents() == null || openApi.getComponents().getSchemas() == null) { return openApi; } @@ -499,6 +520,7 @@ protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) { .retainAll(referencedDefinitions.stream() .map(s -> (String) RefUtils.extractSimpleName(s).getLeft()) .collect(Collectors.toSet())); + this._ctxOpenAPI = null; return openApi; }