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) {
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<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) {
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<String, ApiResponse> 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<String, Header> headers = response.getHeaders();
@ -4552,9 +4553,10 @@ public class DefaultCodegen implements CodegenConfig {
List<Map<String, String>> 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()) {

View File

@ -587,7 +587,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
}
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 &&
!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()

View File

@ -345,7 +345,7 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig
if (operation.getResponses() != null) {
for (Map.Entry<String, ApiResponse> 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()) {

View File

@ -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")) {

View File

@ -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.