Last active
June 10, 2021 03:22
-
-
Save thepipeman/b7e4b9d5103d1c2ecaed4b4d38d349ee to your computer and use it in GitHub Desktop.
Java openapi generator - model template with Lombok annotations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{{>licenseInfo}} | |
package {{package}}; | |
import lombok.*; | |
{{#useReflectionEqualsHashCode}} | |
import org.apache.commons.lang3.builder.EqualsBuilder; | |
import org.apache.commons.lang3.builder.HashCodeBuilder; | |
{{/useReflectionEqualsHashCode}} | |
{{^supportJava6}} | |
import java.util.Objects; | |
import java.util.Arrays; | |
{{/supportJava6}} | |
{{#supportJava6}} | |
import org.apache.commons.lang3.ObjectUtils; | |
{{/supportJava6}} | |
{{#imports}} | |
import {{import}}; | |
{{/imports}} | |
{{#serializableModel}} | |
import java.io.Serializable; | |
{{/serializableModel}} | |
{{#jackson}} | |
import com.fasterxml.jackson.annotation.JsonPropertyOrder; | |
{{#withXml}} | |
import com.fasterxml.jackson.dataformat.xml.annotation.*; | |
{{/withXml}} | |
{{/jackson}} | |
{{#withXml}} | |
import javax.xml.bind.annotation.*; | |
{{/withXml}} | |
{{#parcelableModel}} | |
import android.os.Parcelable; | |
import android.os.Parcel; | |
{{/parcelableModel}} | |
{{#useBeanValidation}} | |
import javax.validation.constraints.*; | |
import javax.validation.Valid; | |
{{/useBeanValidation}} | |
{{#performBeanValidation}} | |
import org.hibernate.validator.constraints.*; | |
{{/performBeanValidation}} | |
import org.springframework.web.multipart.MultipartFile; | |
import com.fasterxml.jackson.annotation.JsonTypeName; | |
@Builder(toBuilder = true) | |
@EqualsAndHashCode | |
@AllArgsConstructor | |
@NoArgsConstructor(access = AccessLevel.PRIVATE) | |
{{#models}} | |
{{#model}} | |
{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} | |
{{/model}} | |
{{/models}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* {{#description}}{{.}}{{/description}}{{^description}}{{classname}}{{/description}} | |
*/{{#description}} | |
@ApiModel(description = "{{{description}}}"){{/description}} | |
{{#jackson}} | |
@JsonPropertyOrder({ | |
{{#vars}} | |
{{classname}}.JSON_PROPERTY_{{nameInSnakeCase}}{{^-last}},{{/-last}} | |
{{/vars}} | |
}) | |
@JsonTypeName("{{name}}") | |
{{/jackson}} | |
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}} | |
public class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{ | |
{{#serializableModel}} | |
{{/serializableModel}} | |
{{#vars}} | |
{{#isEnum}} | |
{{^isContainer}} | |
{{>modelInnerEnum}} | |
{{/isContainer}} | |
{{#isContainer}} | |
{{#mostInnerItems}} | |
{{>modelInnerEnum}} | |
{{/mostInnerItems}} | |
{{/isContainer}} | |
{{/isEnum}} | |
{{#gson}} | |
public static final String SERIALIZED_NAME_{{nameInSnakeCase}} = "{{baseName}}"; | |
{{/gson}} | |
{{#jackson}} | |
public static final String JSON_PROPERTY_{{nameInSnakeCase}} = "{{baseName}}"; | |
{{/jackson}} | |
{{#withXml}} | |
{{#isXmlAttribute}} | |
@XmlAttribute(name = "{{#xmlName}}{{xmlName}}{{/xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") | |
{{/isXmlAttribute}} | |
{{^isXmlAttribute}} | |
{{^isContainer}} | |
@XmlElement({{#xmlNamespace}}namespace="{{xmlNamespace}}", {{/xmlNamespace}}name = "{{#xmlName}}{{xmlName}}{{/xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") | |
{{/isContainer}} | |
{{#isContainer}} | |
// Is a container wrapped={{isXmlWrapped}} | |
{{#items}} | |
// items.name={{name}} items.baseName={{baseName}} items.xmlName={{xmlName}} items.xmlNamespace={{xmlNamespace}} | |
// items.example={{example}} items.type={{dataType}} | |
@XmlElement({{#xmlNamespace}}namespace="{{xmlNamespace}}", {{/xmlNamespace}}name = "{{#xmlName}}{{xmlName}}{{/xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") | |
{{/items}} | |
{{#isXmlWrapped}} | |
@XmlElementWrapper({{#xmlNamespace}}namespace="{{xmlNamespace}}", {{/xmlNamespace}}name = "{{#xmlName}}{{xmlName}}{{/xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") | |
{{/isXmlWrapped}} | |
{{/isContainer}} | |
{{/isXmlAttribute}} | |
{{/withXml}} | |
{{#gson}} | |
@SerializedName(SERIALIZED_NAME_{{nameInSnakeCase}}) | |
{{/gson}} | |
{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
{{#isContainer}} | |
private JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>undefined(); | |
{{/isContainer}} | |
{{^isContainer}} | |
private JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; | |
{{/isContainer}} | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^vendorExtensions.x-is-jackson-optional-nullable}} | |
{{#isContainer}} | |
private {{{datatypeWithEnum}}} {{name}}{{#required}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{/required}}{{^required}} = null{{/required}}; | |
{{/isContainer}} | |
{{^isContainer}} | |
{{#isDiscriminator}}protected{{/isDiscriminator}}{{^isDiscriminator}}private{{/isDiscriminator}} {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; | |
{{/isContainer}} | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{/vars}} | |
{{#parcelableModel}} | |
public {{classname}}() { | |
{{#parent}} | |
super(); | |
{{/parent}} | |
{{#gson}} | |
{{#discriminator}} | |
this.{{{discriminatorName}}} = this.getClass().getSimpleName(); | |
{{/discriminator}} | |
{{/gson}} | |
} | |
{{/parcelableModel}} | |
{{^parcelableModel}} | |
{{#gson}} | |
{{#discriminator}} | |
public {{classname}}() { | |
this.{{{discriminatorName}}} = this.getClass().getSimpleName(); | |
} | |
{{/discriminator}} | |
{{/gson}} | |
{{/parcelableModel}} | |
{{#vars}} | |
{{^isReadOnly}} | |
public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { | |
{{#vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}});{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = {{name}};{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
return this; | |
} | |
{{#isListContainer}} | |
public {{classname}} add{{nameInCamelCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { | |
{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
if (this.{{name}} == null || !this.{{name}}.isPresent()) { | |
this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}); | |
} | |
try { | |
this.{{name}}.get().add({{name}}Item); | |
} catch (java.util.NoSuchElementException e) { | |
// this can never happen, as we make sure above that the value is present | |
} | |
return this; | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^required}} | |
if (this.{{name}} == null) { | |
this.{{name}} = {{{defaultValue}}}; | |
} | |
{{/required}} | |
this.{{name}}.add({{name}}Item); | |
return this; | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
} | |
{{/isListContainer}} | |
{{#isMapContainer}} | |
public {{classname}} put{{nameInCamelCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { | |
{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
if (this.{{name}} == null || !this.{{name}}.isPresent()) { | |
this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}); | |
} | |
try { | |
this.{{name}}.get().put(key, {{name}}Item); | |
} catch (java.util.NoSuchElementException e) { | |
// this can never happen, as we make sure above that the value is present | |
} | |
return this; | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^required}} | |
if (this.{{name}} == null) { | |
this.{{name}} = {{{defaultValue}}}; | |
} | |
{{/required}} | |
this.{{name}}.put(key, {{name}}Item); | |
return this; | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
} | |
{{/isMapContainer}} | |
{{/isReadOnly}} | |
/** | |
{{#description}} | |
* {{description}} | |
{{/description}} | |
{{^description}} | |
* Get {{name}} | |
{{/description}} | |
{{#minimum}} | |
* minimum: {{minimum}} | |
{{/minimum}} | |
{{#maximum}} | |
* maximum: {{maximum}} | |
{{/maximum}} | |
* @return {{name}} | |
**/ | |
{{#required}} | |
{{#isNullable}} | |
@javax.annotation.Nullable | |
{{/isNullable}} | |
{{/required}} | |
{{^required}} | |
@javax.annotation.Nullable | |
{{/required}} | |
{{#useBeanValidation}}{{>beanValidation}}{{/useBeanValidation}} @ApiModelProperty({{#example}}example = "{{{example}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") | |
{{#vendorExtensions.x-extra-annotation}} | |
{{{vendorExtensions.x-extra-annotation}}} | |
{{/vendorExtensions.x-extra-annotation}} | |
{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
{{!unannotated, Jackson would pick this up automatically and add it *in addition* to the _JsonNullable getter field}} | |
@JsonIgnore | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
public {{{datatypeWithEnum}}} {{getter}}() { | |
{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} | |
if ({{name}} == null) { | |
{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; | |
} | |
{{/isReadOnly}} | |
return {{name}}.orElse(null); | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^vendorExtensions.x-is-jackson-optional-nullable}} | |
return {{name}}; | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
} | |
{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
{{> jackson_annotations}} | |
public JsonNullable<{{{datatypeWithEnum}}}> {{getter}}_JsonNullable() { | |
return {{name}}; | |
} | |
{{/vendorExtensions.x-is-jackson-optional-nullable}}{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}) | |
{{#isReadOnly}}private{{/isReadOnly}}{{^isReadOnly}}public{{/isReadOnly}} void {{setter}}_JsonNullable(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) { | |
{{! For getters/setters that have name differing from attribute name, we must include setter (albeit private) for jackson to be able to set the attribute}} | |
this.{{name}} = {{name}}; | |
} | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^isReadOnly}} | |
public void {{setter}}({{{datatypeWithEnum}}} {{name}}) { | |
{{#vendorExtensions.x-is-jackson-optional-nullable}} | |
this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}}); | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
{{^vendorExtensions.x-is-jackson-optional-nullable}} | |
this.{{name}} = {{name}}; | |
{{/vendorExtensions.x-is-jackson-optional-nullable}} | |
} | |
{{/isReadOnly}} | |
{{/vars}} | |
/** | |
* Convert the given object to string with each line indented by 4 spaces | |
* (except the first line). | |
*/ | |
private String toIndentedString(java.lang.Object o) { | |
if (o == null) { | |
return "null"; | |
} | |
return o.toString().replace("\n", "\n "); | |
} | |
{{#parcelableModel}} | |
public void writeToParcel(Parcel out, int flags) { | |
{{#model}} | |
{{#isArrayModel}} | |
out.writeList(this); | |
{{/isArrayModel}} | |
{{^isArrayModel}} | |
{{#parent}} | |
super.writeToParcel(out, flags); | |
{{/parent}} | |
{{#vars}} | |
out.writeValue({{name}}); | |
{{/vars}} | |
{{/isArrayModel}} | |
{{/model}} | |
} | |
{{classname}}(Parcel in) { | |
{{#isArrayModel}} | |
in.readTypedList(this, {{arrayModelType}}.CREATOR); | |
{{/isArrayModel}} | |
{{^isArrayModel}} | |
{{#parent}} | |
super(in); | |
{{/parent}} | |
{{#vars}} | |
{{#isPrimitiveType}} | |
{{name}} = ({{{datatypeWithEnum}}})in.readValue(null); | |
{{/isPrimitiveType}} | |
{{^isPrimitiveType}} | |
{{name}} = ({{{datatypeWithEnum}}})in.readValue({{complexType}}.class.getClassLoader()); | |
{{/isPrimitiveType}} | |
{{/vars}} | |
{{/isArrayModel}} | |
} | |
public int describeContents() { | |
return 0; | |
} | |
public static final Parcelable.Creator<{{classname}}> CREATOR = new Parcelable.Creator<{{classname}}>() { | |
public {{classname}} createFromParcel(Parcel in) { | |
{{#model}} | |
{{#isArrayModel}} | |
{{classname}} result = new {{classname}}(); | |
result.addAll(in.readArrayList({{arrayModelType}}.class.getClassLoader())); | |
return result; | |
{{/isArrayModel}} | |
{{^isArrayModel}} | |
return new {{classname}}(in); | |
{{/isArrayModel}} | |
{{/model}} | |
} | |
public {{classname}}[] newArray(int size) { | |
return new {{classname}}[size]; | |
} | |
}; | |
{{/parcelableModel}} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment