better handling of api response

This commit is contained in:
William Cheng 2024-10-28 11:33:39 +08:00
parent 836d426d21
commit 537737730b
5 changed files with 13 additions and 8 deletions

View File

@ -4331,7 +4331,7 @@ public class DefaultCodegen implements CodegenConfig {
if (code == null) { if (code == null) {
return 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, CodegenOperation op,
ApiResponse methodResponse, ApiResponse methodResponse,
Map<String, String> schemaMappings) { Map<String, String> schemaMappings) {
Schema responseSchema = unaliasSchema(ModelUtils.getSchemaFromResponse(openAPI, methodResponse)); ApiResponse response = ModelUtils.getReferencedApiResponse(openAPI, methodResponse);
Schema responseSchema = unaliasSchema(ModelUtils.getSchemaFromResponse(openAPI, response));
if (responseSchema != null) { if (responseSchema != null) {
CodegenProperty cm = fromProperty("response", responseSchema, false); CodegenProperty cm = fromProperty("response", responseSchema, false);
@ -4416,7 +4417,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
op.returnProperty = cm; 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()); ApiResponse methodResponse = findMethodResponse(operation.getResponses());
for (Map.Entry<String, ApiResponse> operationGetResponsesEntry : operation.getResponses().entrySet()) { for (Map.Entry<String, ApiResponse> operationGetResponsesEntry : operation.getResponses().entrySet()) {
String key = operationGetResponsesEntry.getKey(); String key = operationGetResponsesEntry.getKey();
ApiResponse response = operationGetResponsesEntry.getValue(); ApiResponse response = ModelUtils.getReferencedApiResponse(openAPI, operationGetResponsesEntry.getValue());
addProducesInfo(response, op); addProducesInfo(response, op);
CodegenResponse r = fromResponse(key, response); CodegenResponse r = fromResponse(key, response);
Map<String, Header> headers = response.getHeaders(); Map<String, Header> headers = response.getHeaders();
@ -4552,9 +4553,10 @@ public class DefaultCodegen implements CodegenConfig {
List<Map<String, String>> examples = new ArrayList<>(); List<Map<String, String>> examples = new ArrayList<>();
for (String statusCode : operation.getResponses().keySet()) { 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)); Schema schema = unaliasSchema(ModelUtils.getSchemaFromResponse(openAPI, apiResponse));
if (schema == null) { if (schema == null) {
// void response
continue; continue;
} }
@ -5142,7 +5144,7 @@ public class DefaultCodegen implements CodegenConfig {
parameterModelName = getParameterDataType(parameter, parameterSchema); parameterModelName = getParameterDataType(parameter, parameterSchema);
CodegenProperty prop; CodegenProperty prop;
if (this instanceof RustServerCodegen) { 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 // $ref (e.g. #components/schemas/Pet) to determine whether it's a model
prop = fromProperty(parameter.getName(), parameterSchema, false); prop = fromProperty(parameter.getName(), parameterSchema, false);
} else if (getUseInlineModelResolver()) { } else if (getUseInlineModelResolver()) {

View File

@ -587,7 +587,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
} }
for (Map.Entry<String, ApiResponse> responseEntry : operation.getResponses().entrySet()) { for (Map.Entry<String, ApiResponse> 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 && if (r.baseType != null &&
!defaultIncludes.contains(r.baseType) && !defaultIncludes.contains(r.baseType) &&
!languageSpecificPrimitives.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 * @return true if should be hidden, false otherwise
*/ */
private boolean shouldHideOperationResponse(ApiResponse resp) { private boolean shouldHideOperationResponse(ApiResponse resp) {
resp = ModelUtils.getReferencedApiResponse(openAPI, resp);
boolean hideOperationResponse = false; boolean hideOperationResponse = false;
if (Objects.nonNull(resp.getExtensions()) && !resp.getExtensions().isEmpty() if (Objects.nonNull(resp.getExtensions()) && !resp.getExtensions().isEmpty()

View File

@ -345,7 +345,7 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig
if (operation.getResponses() != null) { if (operation.getResponses() != null) {
for (Map.Entry<String, ApiResponse> operationGetResponsesEntry : operation.getResponses().entrySet()) { for (Map.Entry<String, ApiResponse> operationGetResponsesEntry : operation.getResponses().entrySet()) {
String s = operationGetResponsesEntry.getKey(); String s = operationGetResponsesEntry.getKey();
ApiResponse apiResponse = operationGetResponsesEntry.getValue(); ApiResponse apiResponse = ModelUtils.getReferencedApiResponse(openAPI, operationGetResponsesEntry.getValue());
if (apiResponse.getContent() != null) { if (apiResponse.getContent() != null) {
Content content = apiResponse.getContent(); Content content = apiResponse.getContent();
for (String p : content.keySet()) { for (String p : content.keySet()) {

View File

@ -475,6 +475,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
} else { } else {
original = operation.getResponses().get(rsp.code); 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 // 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")) { if (!rsp.vendorExtensions.containsKey("x-response-id")) {

View File

@ -656,6 +656,7 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon
} else { } else {
original = operation.getResponses().get(rsp.code); original = operation.getResponses().get(rsp.code);
} }
original = ModelUtils.getReferencedApiResponse(openAPI, original);
String[] words = rsp.message.split("[^A-Za-z ]"); String[] words = rsp.message.split("[^A-Za-z ]");
// Create a unique responseID for this response. // Create a unique responseID for this response.