openapi-generator
openapi-generator copied to clipboard
[QUESTION][JAVA] How to generate inner static class by spec?
I use jaxrs-cxf generator
AAA:
properties:
someValue:
type: string
BBB:
properties:
someValue:
type: string
Is it possible to make BBB is inner class into AAA ?
public class AAA {
protected String someValue;
public static class BBB {
protected String someValue;
}
}
maybe I need to change something in my pojo.mustache and use oneOf property?
maybe you can try this? config:
AAA:
properties:
someValue:
type: string
BBB:
type: object
properties:
someValue:
type: string
add VendorExtensions
import org.openapitools.codegen.languages.JavaClientCodegen;
public class JavaCodegen extends JavaClientCodegen {
@Override
public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs) {
Map<String, ModelsMap> result = super.postProcessAllModels(objs);
Set<String> removeKeys = new HashSet<>();
for (ModelsMap mm : result.values()) {
for (ModelMap mMap : mm.getModels()) {
CodegenModel parent = mMap.getModel();
//todo get children
List<CodegenModel> subs =
if (subs != null && !subs.isEmpty()) {
for (CodegenModel sub : subs) {
parent.imports.addAll(sub.imports);
}
parent.getVendorExtensions()
.put("x-children-model", subs);
subs.forEach(c -> removeKeys.add(c.getName()));
}
}
}
removeKeys.forEach(result::remove);
return result;
}
pojo.mustache
public class {{classname}} {
{{#vars}}
private {{{datatypeWithEnum}}} {{name}};
{{/vars}}
public {{classname}}() {
}
{{#vars}}
public {{{datatypeWithEnum}}} {{getter}}() {
return {{name}};
}
public void {{setter}}({{{datatypeWithEnum}}} {{name}}) {
this.{{name}} = {{name}};
}
{{/vars}}
{{#vendorExtensions.x-children-model}}
public static class {{classname}} {
{{#vars}}
private {{{datatypeWithEnum}}} {{name}};
{{/vars}}
public {{classname}}() {
}
{{#vars}}
public {{{datatypeWithEnum}}} {{getter}}() {
return {{name}};
}
public void {{setter}}({{{datatypeWithEnum}}} {{name}}) {
this.{{name}} = {{name}};
}
{{/vars}}
}
{{/vendorExtensions.x-children-model}}
}