forked from loafle/openapi-generator-original
[Java][Client] JSON-B serialization support (#8729)
* Added JSON-B support. * Mention jsonb in docs
This commit is contained in:
parent
2b716684f3
commit
264b017eec
@ -52,7 +52,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|scmDeveloperConnection|SCM developer connection in generated pom.xml| |scm:git:git@github.com:openapitools/openapi-generator.git|
|
||||
|scmUrl|SCM URL in generated pom.xml| |https://github.com/openapitools/openapi-generator|
|
||||
|serializableModel|boolean - toggle "implements Serializable" for generated models| |false|
|
||||
|serializationLibrary|Serialization library, default depends from the library|<dl><dt>**jackson**</dt><dd>Use Jackson as serialization library</dd><dt>**gson**</dt><dd>Use Gson as serialization library</dd></dl>|null|
|
||||
|serializationLibrary|Serialization library, default depends from the library|<dl><dt>**jsonb**</dt><dd>Use JSON-B as serialization library</dd><dt>**jackson**</dt><dd>Use Jackson as serialization library</dd><dt>**gson**</dt><dd>Use Gson as serialization library</dd></dl>|null|
|
||||
|snapshotVersion|Uses a SNAPSHOT version.|<dl><dt>**true**</dt><dd>Use a SnapShot Version</dd><dt>**false**</dt><dd>Use a Release Version</dd></dl>|null|
|
||||
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true|
|
||||
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
|
||||
|
@ -540,13 +540,6 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
|
||||
}
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(WITH_XML)) {
|
||||
setWithXml(Boolean.parseBoolean(additionalProperties.get(WITH_XML).toString()));
|
||||
if (withXml) {
|
||||
additionalProperties.put(WITH_XML, "true");
|
||||
}
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(DATE_LIBRARY)) {
|
||||
setDateLibrary(additionalProperties.get("dateLibrary").toString());
|
||||
}
|
||||
|
@ -87,6 +87,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
|
||||
public static final String SERIALIZATION_LIBRARY_GSON = "gson";
|
||||
public static final String SERIALIZATION_LIBRARY_JACKSON = "jackson";
|
||||
public static final String SERIALIZATION_LIBRARY_JSONB = "jsonb";
|
||||
|
||||
protected String gradleWrapperPackage = "gradle.wrapper";
|
||||
protected boolean useRxJava = false;
|
||||
@ -179,6 +180,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
Map<String, String> serializationOptions = new HashMap<>();
|
||||
serializationOptions.put(SERIALIZATION_LIBRARY_GSON, "Use Gson as serialization library");
|
||||
serializationOptions.put(SERIALIZATION_LIBRARY_JACKSON, "Use Jackson as serialization library");
|
||||
serializationOptions.put(SERIALIZATION_LIBRARY_JSONB, "Use JSON-B as serialization library");
|
||||
serializationLibrary.setEnum(serializationOptions);
|
||||
cliOptions.add(serializationLibrary);
|
||||
|
||||
@ -554,21 +556,33 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
LOGGER.info("No serializationLibrary configured, using '" + SERIALIZATION_LIBRARY_GSON + "' as fallback");
|
||||
setSerializationLibrary(SERIALIZATION_LIBRARY_GSON);
|
||||
}
|
||||
if (SERIALIZATION_LIBRARY_JACKSON.equals(getSerializationLibrary())) {
|
||||
switch (getSerializationLibrary()) {
|
||||
case SERIALIZATION_LIBRARY_JACKSON:
|
||||
additionalProperties.put(SERIALIZATION_LIBRARY_JACKSON, "true");
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_GSON);
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_JSONB);
|
||||
supportingFiles.add(new SupportingFile("RFC3339DateFormat.mustache", invokerFolder, "RFC3339DateFormat.java"));
|
||||
if (!NATIVE.equals(getLibrary())) {
|
||||
if ("threetenbp".equals(dateLibrary) && !usePlayWS) {
|
||||
supportingFiles.add(new SupportingFile("CustomInstantDeserializer.mustache", invokerFolder, "CustomInstantDeserializer.java"));
|
||||
}
|
||||
}
|
||||
} else if (SERIALIZATION_LIBRARY_GSON.equals(getSerializationLibrary())) {
|
||||
break;
|
||||
case SERIALIZATION_LIBRARY_GSON:
|
||||
additionalProperties.put(SERIALIZATION_LIBRARY_GSON, "true");
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON);
|
||||
} else {
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_JSONB);
|
||||
break;
|
||||
case SERIALIZATION_LIBRARY_JSONB:
|
||||
additionalProperties.put(SERIALIZATION_LIBRARY_JSONB, "true");
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON);
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_GSON);
|
||||
break;
|
||||
default:
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON);
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_GSON);
|
||||
additionalProperties.remove(SERIALIZATION_LIBRARY_JSONB);
|
||||
break;
|
||||
}
|
||||
|
||||
// authentication related files
|
||||
@ -974,6 +988,8 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
this.serializationLibrary = SERIALIZATION_LIBRARY_JACKSON;
|
||||
} else if (SERIALIZATION_LIBRARY_GSON.equalsIgnoreCase(serializationLibrary)) {
|
||||
this.serializationLibrary = SERIALIZATION_LIBRARY_GSON;
|
||||
} else if (SERIALIZATION_LIBRARY_JSONB.equalsIgnoreCase(serializationLibrary)) {
|
||||
this.serializationLibrary = SERIALIZATION_LIBRARY_JSONB;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unexpected serializationLibrary value: " + serializationLibrary);
|
||||
}
|
||||
|
@ -23,6 +23,18 @@ import com.fasterxml.jackson.dataformat.xml.annotation.*;
|
||||
{{#withXml}}
|
||||
import javax.xml.bind.annotation.*;
|
||||
{{/withXml}}
|
||||
{{#jsonb}}
|
||||
import java.lang.reflect.Type;
|
||||
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||
import javax.json.bind.serializer.DeserializationContext;
|
||||
import javax.json.bind.serializer.JsonbDeserializer;
|
||||
import javax.json.bind.serializer.JsonbSerializer;
|
||||
import javax.json.bind.serializer.SerializationContext;
|
||||
import javax.json.stream.JsonGenerator;
|
||||
import javax.json.stream.JsonParser;
|
||||
import javax.json.bind.annotation.JsonbProperty;
|
||||
{{/jsonb}}
|
||||
{{#parcelableModel}}
|
||||
import android.os.Parcelable;
|
||||
import android.os.Parcel;
|
||||
|
@ -16,6 +16,10 @@ import com.google.gson.stream.JsonWriter;
|
||||
{{#gson}}
|
||||
@JsonAdapter({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.Adapter.class)
|
||||
{{/gson}}
|
||||
{{#jsonb}}
|
||||
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
|
||||
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
|
||||
{{/jsonb}}
|
||||
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
|
||||
{{#allowableValues}}{{#enumVars}}
|
||||
{{#enumDescription}}
|
||||
@ -23,6 +27,9 @@ public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum
|
||||
* {{enumDescription}}
|
||||
*/
|
||||
{{/enumDescription}}
|
||||
{{#withXml}}
|
||||
@XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
|
||||
{{/withXml}}
|
||||
{{{name}}}({{{value}}}){{^-last}},
|
||||
{{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
|
||||
|
||||
@ -70,4 +77,24 @@ public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum
|
||||
}
|
||||
}
|
||||
{{/gson}}
|
||||
{{#jsonb}}
|
||||
public static final class Deserializer implements JsonbDeserializer<{{datatypeWithEnum}}> {
|
||||
@Override
|
||||
public {{datatypeWithEnum}} deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
|
||||
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
|
||||
if (String.valueOf(b.value).equals(parser.getString())) {
|
||||
return b;
|
||||
}
|
||||
}
|
||||
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");{{/useNullForUnknownEnumValue}}
|
||||
}
|
||||
}
|
||||
|
||||
public static final class Serializer implements JsonbSerializer<{{datatypeWithEnum}}> {
|
||||
@Override
|
||||
public void serialize({{datatypeWithEnum}} obj, JsonGenerator generator, SerializationContext ctx) {
|
||||
generator.write(obj.value);
|
||||
}
|
||||
}
|
||||
{{/jsonb}}
|
||||
}
|
||||
|
@ -4,6 +4,14 @@
|
||||
{{#gson}}
|
||||
@JsonAdapter({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}.Adapter.class)
|
||||
{{/gson}}
|
||||
{{#jsonb}}
|
||||
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
|
||||
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
|
||||
{{/jsonb}}
|
||||
{{#withXml}}
|
||||
@XmlType(name="{{datatypeWithEnum}}")
|
||||
@XmlEnum({{dataType}}.class)
|
||||
{{/withXml}}
|
||||
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
|
||||
{{#allowableValues}}
|
||||
{{#enumVars}}
|
||||
@ -12,6 +20,9 @@
|
||||
* {{enumDescription}}
|
||||
*/
|
||||
{{/enumDescription}}
|
||||
{{#withXml}}
|
||||
@XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
|
||||
{{/withXml}}
|
||||
{{{name}}}({{{value}}}){{^-last}},
|
||||
{{/-last}}{{#-last}};{{/-last}}
|
||||
{{/enumVars}}
|
||||
@ -61,4 +72,24 @@
|
||||
}
|
||||
}
|
||||
{{/gson}}
|
||||
{{#jsonb}}
|
||||
public static final class Deserializer implements JsonbDeserializer<{{datatypeWithEnum}}> {
|
||||
@Override
|
||||
public {{datatypeWithEnum}} deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
|
||||
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
|
||||
if (String.valueOf(b.value).equals(parser.getString())) {
|
||||
return b;
|
||||
}
|
||||
}
|
||||
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");{{/useNullForUnknownEnumValue}}
|
||||
}
|
||||
}
|
||||
|
||||
public static final class Serializer implements JsonbSerializer<{{datatypeWithEnum}}> {
|
||||
@Override
|
||||
public void serialize({{datatypeWithEnum}} obj, JsonGenerator generator, SerializationContext ctx) {
|
||||
generator.write(obj.value);
|
||||
}
|
||||
}
|
||||
{{/jsonb}}
|
||||
}
|
||||
|
@ -179,6 +179,9 @@ public class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{{#vendorE
|
||||
{{^required}}
|
||||
@javax.annotation.Nullable
|
||||
{{/required}}
|
||||
{{#jsonb}}
|
||||
@JsonbProperty("{{baseName}}")
|
||||
{{/jsonb}}
|
||||
{{#useBeanValidation}}{{>beanValidation}}{{/useBeanValidation}} @ApiModelProperty({{#example}}example = "{{{example}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}")
|
||||
{{#vendorExtensions.x-extra-annotation}}
|
||||
{{{vendorExtensions.x-extra-annotation}}}
|
||||
@ -276,7 +279,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{{#vendorE
|
||||
* Convert the given object to string with each line indented by 4 spaces
|
||||
* (except the first line).
|
||||
*/
|
||||
private String toIndentedString(Object o) {
|
||||
private{{#jsonb}} static{{/jsonb}} String toIndentedString(Object o) {
|
||||
if (o == null) {
|
||||
return "null";
|
||||
}
|
||||
|
@ -47,13 +47,19 @@ public class BigCat extends Cat {
|
||||
/**
|
||||
* Gets or Sets kind
|
||||
*/
|
||||
@XmlType(name="KindEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum KindEnum {
|
||||
@XmlEnumValue("lions")
|
||||
LIONS("lions"),
|
||||
|
||||
@XmlEnumValue("tigers")
|
||||
TIGERS("tigers"),
|
||||
|
||||
@XmlEnumValue("leopards")
|
||||
LEOPARDS("leopards"),
|
||||
|
||||
@XmlEnumValue("jaguars")
|
||||
JAGUARS("jaguars");
|
||||
|
||||
private String value;
|
||||
|
@ -41,13 +41,19 @@ public class BigCatAllOf {
|
||||
/**
|
||||
* Gets or Sets kind
|
||||
*/
|
||||
@XmlType(name="KindEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum KindEnum {
|
||||
@XmlEnumValue("lions")
|
||||
LIONS("lions"),
|
||||
|
||||
@XmlEnumValue("tigers")
|
||||
TIGERS("tigers"),
|
||||
|
||||
@XmlEnumValue("leopards")
|
||||
LEOPARDS("leopards"),
|
||||
|
||||
@XmlEnumValue("jaguars")
|
||||
JAGUARS("jaguars");
|
||||
|
||||
private String value;
|
||||
|
@ -44,9 +44,13 @@ public class EnumArrays {
|
||||
/**
|
||||
* Gets or Sets justSymbol
|
||||
*/
|
||||
@XmlType(name="JustSymbolEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum JustSymbolEnum {
|
||||
@XmlEnumValue(">=")
|
||||
GREATER_THAN_OR_EQUAL_TO(">="),
|
||||
|
||||
@XmlEnumValue("$")
|
||||
DOLLAR("$");
|
||||
|
||||
private String value;
|
||||
@ -83,9 +87,13 @@ public class EnumArrays {
|
||||
/**
|
||||
* Gets or Sets arrayEnum
|
||||
*/
|
||||
@XmlType(name="ArrayEnumEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum ArrayEnumEnum {
|
||||
@XmlEnumValue("fish")
|
||||
FISH("fish"),
|
||||
|
||||
@XmlEnumValue("crab")
|
||||
CRAB("crab");
|
||||
|
||||
private String value;
|
||||
|
@ -27,10 +27,13 @@ import com.fasterxml.jackson.annotation.JsonValue;
|
||||
*/
|
||||
public enum EnumClass {
|
||||
|
||||
@XmlEnumValue("_abc")
|
||||
_ABC("_abc"),
|
||||
|
||||
@XmlEnumValue("-efg")
|
||||
_EFG("-efg"),
|
||||
|
||||
@XmlEnumValue("(xyz)")
|
||||
_XYZ_("(xyz)");
|
||||
|
||||
private String value;
|
||||
|
@ -46,11 +46,16 @@ public class EnumTest {
|
||||
/**
|
||||
* Gets or Sets enumString
|
||||
*/
|
||||
@XmlType(name="EnumStringEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum EnumStringEnum {
|
||||
@XmlEnumValue("UPPER")
|
||||
UPPER("UPPER"),
|
||||
|
||||
@XmlEnumValue("lower")
|
||||
LOWER("lower"),
|
||||
|
||||
@XmlEnumValue("")
|
||||
EMPTY("");
|
||||
|
||||
private String value;
|
||||
@ -87,11 +92,16 @@ public class EnumTest {
|
||||
/**
|
||||
* Gets or Sets enumStringRequired
|
||||
*/
|
||||
@XmlType(name="EnumStringRequiredEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum EnumStringRequiredEnum {
|
||||
@XmlEnumValue("UPPER")
|
||||
UPPER("UPPER"),
|
||||
|
||||
@XmlEnumValue("lower")
|
||||
LOWER("lower"),
|
||||
|
||||
@XmlEnumValue("")
|
||||
EMPTY("");
|
||||
|
||||
private String value;
|
||||
@ -128,9 +138,13 @@ public class EnumTest {
|
||||
/**
|
||||
* Gets or Sets enumInteger
|
||||
*/
|
||||
@XmlType(name="EnumIntegerEnum")
|
||||
@XmlEnum(Integer.class)
|
||||
public enum EnumIntegerEnum {
|
||||
@XmlEnumValue("1")
|
||||
NUMBER_1(1),
|
||||
|
||||
@XmlEnumValue("-1")
|
||||
NUMBER_MINUS_1(-1);
|
||||
|
||||
private Integer value;
|
||||
@ -167,9 +181,13 @@ public class EnumTest {
|
||||
/**
|
||||
* Gets or Sets enumNumber
|
||||
*/
|
||||
@XmlType(name="EnumNumberEnum")
|
||||
@XmlEnum(Double.class)
|
||||
public enum EnumNumberEnum {
|
||||
@XmlEnumValue("1.1")
|
||||
NUMBER_1_DOT_1(1.1),
|
||||
|
||||
@XmlEnumValue("-1.2")
|
||||
NUMBER_MINUS_1_DOT_2(-1.2);
|
||||
|
||||
private Double value;
|
||||
|
@ -54,9 +54,13 @@ public class MapTest {
|
||||
/**
|
||||
* Gets or Sets inner
|
||||
*/
|
||||
@XmlType(name="InnerEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum InnerEnum {
|
||||
@XmlEnumValue("UPPER")
|
||||
UPPER("UPPER"),
|
||||
|
||||
@XmlEnumValue("lower")
|
||||
LOWER("lower");
|
||||
|
||||
private String value;
|
||||
|
@ -63,11 +63,16 @@ public class Order {
|
||||
/**
|
||||
* Order Status
|
||||
*/
|
||||
@XmlType(name="StatusEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum StatusEnum {
|
||||
@XmlEnumValue("placed")
|
||||
PLACED("placed"),
|
||||
|
||||
@XmlEnumValue("approved")
|
||||
APPROVED("approved"),
|
||||
|
||||
@XmlEnumValue("delivered")
|
||||
DELIVERED("delivered");
|
||||
|
||||
private String value;
|
||||
|
@ -27,10 +27,13 @@ import com.fasterxml.jackson.annotation.JsonValue;
|
||||
*/
|
||||
public enum OuterEnum {
|
||||
|
||||
@XmlEnumValue("placed")
|
||||
PLACED("placed"),
|
||||
|
||||
@XmlEnumValue("approved")
|
||||
APPROVED("approved"),
|
||||
|
||||
@XmlEnumValue("delivered")
|
||||
DELIVERED("delivered");
|
||||
|
||||
private String value;
|
||||
|
@ -80,11 +80,16 @@ public class Pet {
|
||||
/**
|
||||
* pet status in the store
|
||||
*/
|
||||
@XmlType(name="StatusEnum")
|
||||
@XmlEnum(String.class)
|
||||
public enum StatusEnum {
|
||||
@XmlEnumValue("available")
|
||||
AVAILABLE("available"),
|
||||
|
||||
@XmlEnumValue("pending")
|
||||
PENDING("pending"),
|
||||
|
||||
@XmlEnumValue("sold")
|
||||
SOLD("sold");
|
||||
|
||||
private String value;
|
||||
|
Loading…
x
Reference in New Issue
Block a user