Skip to content

Commit b7bf7ff

Browse files
committed
Fix generating model with discriminator.
Fixed #1163
1 parent c82d466 commit b7bf7ff

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

openapi-generator/src/main/java/io/micronaut/openapi/generator/AbstractMicronautJavaCodegen.java

+4
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,10 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
794794
List<CodegenProperty> requiredVars = model.vars.stream().filter(v -> v.required).collect(Collectors.toList());
795795
model.vendorExtensions.put("requiredVars", requiredVars);
796796
model.vendorExtensions.put("areRequiredVarsAndReadOnlyVars", !requiredVars.isEmpty() && !model.readOnlyVars.isEmpty());
797+
if (model.discriminator != null) {
798+
model.vendorExtensions.put("hasMappedModels", !model.discriminator.getMappedModels().isEmpty());
799+
model.vendorExtensions.put("hasMultipleMappedModels", model.discriminator.getMappedModels().size() > 1);
800+
}
797801
}
798802

799803
return objs;

openapi-generator/src/main/resources/templates/java-micronaut/common/model/typeInfoAnnotation.mustache

+10-5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@
33
value = "{{{discriminator.propertyBaseName}}}", // ignore manually set {{{discriminator.propertyBaseName}}}, it will be automatically generated by Jackson during serialization
44
allowSetters = true // allows the {{{discriminator.propertyBaseName}}} to be set during deserialization
55
)
6-
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}"{{^micronaut_serde_jackson}}, visible = true{{/micronaut_serde_jackson}})
6+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "{{{discriminator.propertyBaseName}}}"{{^micronaut_serde_jackson}}, visible = true{{/micronaut_serde_jackson}})
77
{{#discriminator}}
8-
{{#mappedModels.0}}
9-
@JsonSubTypes({ {{#mappedModels}}
8+
{{#vendorExtensions.hasMappedModels}}
9+
{{#vendorExtensions.hasMultipleMappedModels}}
10+
@JsonSubTypes({{openbrace}}{{#mappedModels}}
1011
@JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"){{^-last}},{{/-last}}
11-
{{/mappedModels}}{{closebarace}})
12-
{{/mappedModels.0}}
12+
{{/mappedModels}}{{closebrace}})
13+
{{/vendorExtensions.hasMultipleMappedModels}}
14+
{{^vendorExtensions.hasMultipleMappedModels}}
15+
@JsonSubTypes({{#mappedModels}}@JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"){{/mappedModels}})
16+
{{/vendorExtensions.hasMultipleMappedModels}}
17+
{{/vendorExtensions.hasMappedModels}}
1318
{{/discriminator}}
1419
{{/jackson}}

0 commit comments

Comments
 (0)