Skip to content

Commit 680a2bc

Browse files
stianlikwing328
authored andcommitted
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
1 parent f8e61ac commit 680a2bc

5 files changed

Lines changed: 23 additions & 5 deletions

File tree

  • modules/openapi-generator/src/main
  • samples/client/petstore/java
    • okhttp-gson-parcelableModel/src/main/java/org/openapitools/client
    • okhttp-gson/src/main/java/org/openapitools/client
    • rest-assured/src/main/java/org/openapitools/client

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
6262
public static final String SUPPORT_ASYNC = "supportAsync";
6363
public static final String WITH_XML = "withXml";
6464
public static final String SUPPORT_JAVA6 = "supportJava6";
65+
public static final String DISABLE_HTML_ESCAPING = "disableHtmlEscaping";
6566

6667
protected String dateLibrary = "threetenbp";
6768
protected boolean supportAsync = false;
@@ -93,7 +94,8 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
9394
protected boolean serializeBigDecimalAsString = false;
9495
protected String apiDocPath = "docs/";
9596
protected String modelDocPath = "docs/";
96-
protected boolean supportJava6 = false;
97+
protected boolean supportJava6= false;
98+
protected boolean disableHtmlEscaping = false;
9799

98100
public AbstractJavaCodegen() {
99101
super();
@@ -185,6 +187,7 @@ public AbstractJavaCodegen() {
185187
java8Mode.setEnum(java8ModeOptions);
186188
cliOptions.add(java8Mode);
187189

190+
cliOptions.add(CliOption.newBoolean(DISABLE_HTML_ESCAPING, "Disable HTML escaping of JSON strings when using gson (needed to avoid problems with byte[] fields)"));
188191
}
189192

190193
@Override
@@ -196,6 +199,10 @@ public void processOpts() {
196199
}
197200
additionalProperties.put(SUPPORT_JAVA6, supportJava6);
198201

202+
if (additionalProperties.containsKey(DISABLE_HTML_ESCAPING)) {
203+
this.setDisableHtmlEscaping(Boolean.valueOf(additionalProperties.get(DISABLE_HTML_ESCAPING).toString()));
204+
}
205+
additionalProperties.put(DISABLE_HTML_ESCAPING, disableHtmlEscaping);
199206

200207
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
201208
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
@@ -1222,6 +1229,10 @@ public void setSupportAsync(boolean enabled) {
12221229
this.supportAsync = enabled;
12231230
}
12241231

1232+
public void setDisableHtmlEscaping(boolean disabled) {
1233+
this.disableHtmlEscaping = disabled;
1234+
}
1235+
12251236
@Override
12261237
public String escapeQuotationMark(String input) {
12271238
// remove " to avoid code injection

modules/openapi-generator/src/main/resources/Java/JSON.mustache

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ public class JSON {
7676
})
7777
{{/parent}}
7878
;
79-
return fireBuilder.createGsonBuilder();
79+
GsonBuilder builder = fireBuilder.createGsonBuilder();
80+
{{#disableHtmlEscaping}}
81+
builder.disableHtmlEscaping();
82+
{{/disableHtmlEscaping}}
83+
return builder;
8084
}
8185

8286
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public Class getClassForElement(JsonElement readElement) {
6464
}
6565
})
6666
;
67-
return fireBuilder.createGsonBuilder();
67+
GsonBuilder builder = fireBuilder.createGsonBuilder();
68+
return builder;
6869
}
6970

7071
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public Class getClassForElement(JsonElement readElement) {
6464
}
6565
})
6666
;
67-
return fireBuilder.createGsonBuilder();
67+
GsonBuilder builder = fireBuilder.createGsonBuilder();
68+
return builder;
6869
}
6970

7071
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public Class getClassForElement(JsonElement readElement) {
6464
}
6565
})
6666
;
67-
return fireBuilder.createGsonBuilder();
67+
GsonBuilder builder = fireBuilder.createGsonBuilder();
68+
return builder;
6869
}
6970

7071
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

0 commit comments

Comments
 (0)