From 58d64c28c742519bcde67a0cbebc200edd885f94 Mon Sep 17 00:00:00 2001 From: Joey603 Date: Mon, 6 Oct 2025 16:42:45 -0700 Subject: [PATCH] Fix oneOf schema display in HTML2 generator Convert technical 'oneOf' format to readable 'Type1 or Type2' for better HTML documentation display. Fixes #4431 --- .../languages/StaticHtml2Generator.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java index 71e3e6db1081..d82fa44d45b2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java @@ -39,7 +39,7 @@ import static org.openapitools.codegen.utils.StringUtils.*; -public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfig { +public class StaticHtml2Generator extends DefaultCodegen { private final Logger LOGGER = LoggerFactory.getLogger(StaticHtml2Generator.class); protected String invokerPackage = "org.openapitools.client"; // default for Java and Android @@ -141,6 +141,8 @@ public String getTypeDeclaration(Schema p) { return super.getTypeDeclaration(p); } + + @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List allModels) { OperationMap operations = objs.getOperations(); @@ -288,6 +290,44 @@ public String escapeUnsafeCharacters(String input) { return input; } + @Override + public String getSchemaType(Schema p) { + String schemaType = super.getSchemaType(p); + + // For oneOf schemas, provide a more human-readable format for HTML display + if (schemaType != null && schemaType.startsWith("oneOf<") && schemaType.endsWith(">")) { + // Extract the types inside oneOf<...> and format them as "Type1 or Type2" + String innerTypes = schemaType.substring(6, schemaType.length() - 1); + String[] types = innerTypes.split(","); + List formattedTypes = new ArrayList<>(); + + for (String type : types) { + String trimmedType = type.trim(); + // Convert technical names to more readable ones + if ("object".equals(trimmedType)) { + formattedTypes.add("Object"); + } else if ("string".equals(trimmedType)) { + formattedTypes.add("String"); + } else if ("integer".equals(trimmedType)) { + formattedTypes.add("Integer"); + } else if ("number".equals(trimmedType)) { + formattedTypes.add("Number"); + } else if ("boolean".equals(trimmedType)) { + formattedTypes.add("Boolean"); + } else if ("array".equals(trimmedType)) { + formattedTypes.add("Array"); + } else { + // Capitalize first letter for other types + formattedTypes.add(trimmedType.substring(0, 1).toUpperCase() + trimmedType.substring(1)); + } + } + + return String.join(" or ", formattedTypes); + } + + return schemaType; + } + @Override public GeneratorLanguage generatorLanguage() { return null;