Configuration option to disable HTML escaping when using Gson (#298)

* Configuration option to disable HTML escaping when using Gson

The default implementation of Gson will escape certain characters by default. This
includes the `=` character, which is used in base64 encoding and cause problems when
deserializing the value to a base64 encoded string in a service.

Adding an option for disabling this feature makes it easier to generate client code
with sane defaults.

* Update Petstore sample
This commit is contained in:
Stian Liknes 2018-06-14 13:27:52 +02:00 committed by William Cheng
parent f8e61ac914
commit 680a2bc3ec
5 changed files with 23 additions and 5 deletions

View File

@ -62,6 +62,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
public static final String SUPPORT_ASYNC = "supportAsync"; public static final String SUPPORT_ASYNC = "supportAsync";
public static final String WITH_XML = "withXml"; public static final String WITH_XML = "withXml";
public static final String SUPPORT_JAVA6 = "supportJava6"; public static final String SUPPORT_JAVA6 = "supportJava6";
public static final String DISABLE_HTML_ESCAPING = "disableHtmlEscaping";
protected String dateLibrary = "threetenbp"; protected String dateLibrary = "threetenbp";
protected boolean supportAsync = false; protected boolean supportAsync = false;
@ -94,6 +95,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
protected String apiDocPath = "docs/"; protected String apiDocPath = "docs/";
protected String modelDocPath = "docs/"; protected String modelDocPath = "docs/";
protected boolean supportJava6= false; protected boolean supportJava6= false;
protected boolean disableHtmlEscaping = false;
public AbstractJavaCodegen() { public AbstractJavaCodegen() {
super(); super();
@ -185,6 +187,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
java8Mode.setEnum(java8ModeOptions); java8Mode.setEnum(java8ModeOptions);
cliOptions.add(java8Mode); cliOptions.add(java8Mode);
cliOptions.add(CliOption.newBoolean(DISABLE_HTML_ESCAPING, "Disable HTML escaping of JSON strings when using gson (needed to avoid problems with byte[] fields)"));
} }
@Override @Override
@ -196,6 +199,10 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} }
additionalProperties.put(SUPPORT_JAVA6, supportJava6); additionalProperties.put(SUPPORT_JAVA6, supportJava6);
if (additionalProperties.containsKey(DISABLE_HTML_ESCAPING)) {
this.setDisableHtmlEscaping(Boolean.valueOf(additionalProperties.get(DISABLE_HTML_ESCAPING).toString()));
}
additionalProperties.put(DISABLE_HTML_ESCAPING, disableHtmlEscaping);
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE)); this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
@ -1222,6 +1229,10 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
this.supportAsync = enabled; this.supportAsync = enabled;
} }
public void setDisableHtmlEscaping(boolean disabled) {
this.disableHtmlEscaping = disabled;
}
@Override @Override
public String escapeQuotationMark(String input) { public String escapeQuotationMark(String input) {
// remove " to avoid code injection // remove " to avoid code injection

View File

@ -76,7 +76,11 @@ public class JSON {
}) })
{{/parent}} {{/parent}}
; ;
return fireBuilder.createGsonBuilder(); GsonBuilder builder = fireBuilder.createGsonBuilder();
{{#disableHtmlEscaping}}
builder.disableHtmlEscaping();
{{/disableHtmlEscaping}}
return builder;
} }
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

View File

@ -64,7 +64,8 @@ public class JSON {
} }
}) })
; ;
return fireBuilder.createGsonBuilder(); GsonBuilder builder = fireBuilder.createGsonBuilder();
return builder;
} }
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

View File

@ -64,7 +64,8 @@ public class JSON {
} }
}) })
; ;
return fireBuilder.createGsonBuilder(); GsonBuilder builder = fireBuilder.createGsonBuilder();
return builder;
} }
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

View File

@ -64,7 +64,8 @@ public class JSON {
} }
}) })
; ;
return fireBuilder.createGsonBuilder(); GsonBuilder builder = fireBuilder.createGsonBuilder();
return builder;
} }
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {