From 537737730b2ba832ae3262d677a14bb5e2b9be1f Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 28 Oct 2024 11:33:39 +0800 Subject: [PATCH] better handling of api response --- .../org/openapitools/codegen/DefaultCodegen.java | 14 ++++++++------ .../codegen/languages/K6ClientCodegen.java | 3 ++- .../codegen/languages/OCamlClientCodegen.java | 2 +- .../codegen/languages/RustAxumServerCodegen.java | 1 + .../codegen/languages/RustServerCodegen.java | 1 + 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 88377789e40..527b9bca056 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -4331,7 +4331,7 @@ public class DefaultCodegen implements CodegenConfig { if (code == null) { return null; } - return responses.get(code); + return ModelUtils.getReferencedApiResponse(openAPI, responses.get(code)); } /** @@ -4363,7 +4363,8 @@ public class DefaultCodegen implements CodegenConfig { CodegenOperation op, ApiResponse methodResponse, Map schemaMappings) { - Schema responseSchema = unaliasSchema(ModelUtils.getSchemaFromResponse(openAPI, methodResponse)); + ApiResponse response = ModelUtils.getReferencedApiResponse(openAPI, methodResponse); + Schema responseSchema = unaliasSchema(ModelUtils.getSchemaFromResponse(openAPI, response)); if (responseSchema != null) { CodegenProperty cm = fromProperty("response", responseSchema, false); @@ -4416,7 +4417,7 @@ public class DefaultCodegen implements CodegenConfig { } op.returnProperty = cm; } - addHeaders(methodResponse, op.responseHeaders); + addHeaders(response, op.responseHeaders); } /** @@ -4482,7 +4483,7 @@ public class DefaultCodegen implements CodegenConfig { ApiResponse methodResponse = findMethodResponse(operation.getResponses()); for (Map.Entry operationGetResponsesEntry : operation.getResponses().entrySet()) { String key = operationGetResponsesEntry.getKey(); - ApiResponse response = operationGetResponsesEntry.getValue(); + ApiResponse response = ModelUtils.getReferencedApiResponse(openAPI, operationGetResponsesEntry.getValue()); addProducesInfo(response, op); CodegenResponse r = fromResponse(key, response); Map headers = response.getHeaders(); @@ -4552,9 +4553,10 @@ public class DefaultCodegen implements CodegenConfig { List> examples = new ArrayList<>(); for (String statusCode : operation.getResponses().keySet()) { - ApiResponse apiResponse = operation.getResponses().get(statusCode); + ApiResponse apiResponse = ModelUtils.getReferencedApiResponse(openAPI, operation.getResponses().get(statusCode)); Schema schema = unaliasSchema(ModelUtils.getSchemaFromResponse(openAPI, apiResponse)); if (schema == null) { + // void response continue; } @@ -5142,7 +5144,7 @@ public class DefaultCodegen implements CodegenConfig { parameterModelName = getParameterDataType(parameter, parameterSchema); CodegenProperty prop; if (this instanceof RustServerCodegen) { - // for rust server, we need to do somethings special as it uses + // for rust server, we need to do something special as it uses // $ref (e.g. #components/schemas/Pet) to determine whether it's a model prop = fromProperty(parameter.getName(), parameterSchema, false); } else if (getUseInlineModelResolver()) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/K6ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/K6ClientCodegen.java index fc24fcc1f9f..a79e78d6b4a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/K6ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/K6ClientCodegen.java @@ -587,7 +587,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig { } for (Map.Entry responseEntry : operation.getResponses().entrySet()) { - CodegenResponse r = fromResponse(responseEntry.getKey(), responseEntry.getValue()); + CodegenResponse r = fromResponse(responseEntry.getKey(), ModelUtils.getReferencedApiResponse(openAPI, responseEntry.getValue())); if (r.baseType != null && !defaultIncludes.contains(r.baseType) && !languageSpecificPrimitives.contains(r.baseType)) { @@ -1056,6 +1056,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig { * @return true if should be hidden, false otherwise */ private boolean shouldHideOperationResponse(ApiResponse resp) { + resp = ModelUtils.getReferencedApiResponse(openAPI, resp); boolean hideOperationResponse = false; if (Objects.nonNull(resp.getExtensions()) && !resp.getExtensions().isEmpty() diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java index de6cb04ee96..5c35e666e65 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java @@ -345,7 +345,7 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig if (operation.getResponses() != null) { for (Map.Entry operationGetResponsesEntry : operation.getResponses().entrySet()) { String s = operationGetResponsesEntry.getKey(); - ApiResponse apiResponse = operationGetResponsesEntry.getValue(); + ApiResponse apiResponse = ModelUtils.getReferencedApiResponse(openAPI, operationGetResponsesEntry.getValue()); if (apiResponse.getContent() != null) { Content content = apiResponse.getContent(); for (String p : content.keySet()) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java index d73b35b66b0..440ee6e64f2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java @@ -475,6 +475,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege } else { original = operation.getResponses().get(rsp.code); } + original = ModelUtils.getReferencedApiResponse(openAPI, original); // Create a unique responseID for this response, if one is not already specified with the "x-response-id" extension if (!rsp.vendorExtensions.containsKey("x-response-id")) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java index 5065df651e9..c0d3accc11a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java @@ -656,6 +656,7 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon } else { original = operation.getResponses().get(rsp.code); } + original = ModelUtils.getReferencedApiResponse(openAPI, original); String[] words = rsp.message.split("[^A-Za-z ]"); // Create a unique responseID for this response.