Skip to content

Commit 23aa197

Browse files
committed
Add support for additional properties with composed schema for the jaxrs-spec generator
1 parent e62908e commit 23aa197

3 files changed

Lines changed: 51 additions & 2 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ public void processOpts() {
242242
}
243243

244244
convertPropertyToBooleanAndWriteBack(USE_GZIP_FEATURE, this::setUseGzipFeature);
245+
supportsAdditionalPropertiesWithComposedSchema = true;
245246
}
246247

247248
@Override
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{{#additionalPropertiesType}}
2+
/**
3+
* A container for additional, undeclared properties.
4+
* This is a holder for any undeclared properties as specified with
5+
* the 'additionalProperties' keyword in the OAS document.
6+
*/
7+
private Map<String, {{{.}}}> additionalProperties;
8+
9+
/**
10+
* Set the additional (undeclared) property with the specified name and value.
11+
* If the property does not already exist, create it otherwise replace it.
12+
*/
13+
@JsonAnySetter
14+
public {{classname}} putAdditionalProperty(String key, {{{.}}} value) {
15+
if (this.additionalProperties == null) {
16+
this.additionalProperties = new HashMap<String, {{{.}}}>();
17+
}
18+
this.additionalProperties.put(key, value);
19+
return this;
20+
}
21+
22+
/**
23+
* Return the additional (undeclared) property.
24+
*/
25+
@JsonAnyGetter
26+
public Map<String, {{{.}}}> getAdditionalProperties() {
27+
return additionalProperties;
28+
}
29+
30+
/**
31+
* Return the additional (undeclared) property with the specified name.
32+
*/
33+
public {{{.}}} getAdditionalProperty(String key) {
34+
if (this.additionalProperties == null) {
35+
return null;
36+
}
37+
return this.additionalProperties.get(key);
38+
}
39+
{{/additionalPropertiesType}}

modules/openapi-generator/src/main/resources/JavaJaxRS/spec/pojo.mustache

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
{{#useSwaggerAnnotations}}
22
import io.swagger.annotations.*;
33
{{/useSwaggerAnnotations}}
4+
{{#additionalPropertiesType}}
5+
import java.util.Map;
6+
import java.util.HashMap;
7+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
8+
import com.fasterxml.jackson.annotation.JsonAnySetter;
9+
{{/additionalPropertiesType}}
410
import java.util.Objects;
511
import com.fasterxml.jackson.annotation.JsonProperty;
612
import com.fasterxml.jackson.annotation.JsonCreator;
@@ -143,6 +149,7 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}} {{#vendorExtens
143149
}
144150
{{/isMap}}
145151
{{/vars}}
152+
{{>additionalProperties}}
146153

147154
@Override
148155
public boolean equals(Object o) {
@@ -155,13 +162,13 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}} {{#vendorExtens
155162
{{classname}} {{classVarName}} = ({{classname}}) o;
156163
return {{#vars}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{^-last}} &&
157164
{{/-last}}{{/vars}}{{#parent}} &&
158-
super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}}
165+
super.equals(o){{/parent}}{{#additionalPropertiesType}} && Objects.equals(this.additionalProperties, {{classVarName}}.additionalProperties){{/additionalPropertiesType}};{{/hasVars}}{{^hasVars}}
159166
return {{#parent}}super.equals(o){{/parent}}{{^parent}}true{{/parent}};{{/hasVars}}
160167
}
161168

162169
@Override
163170
public int hashCode() {
164-
return Objects.hash({{#vars}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}});
171+
return Objects.hash({{#vars}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}{{#hasVars}}, {{/hasVars}}{{^hasVars}}{{#parent}}, {{/parent}}{{/hasVars}}additionalProperties{{/additionalPropertiesType}});
165172
}
166173

167174
@Override
@@ -171,6 +178,8 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}} {{#vendorExtens
171178
{{#parent}}sb.append(" ").append(toIndentedString(super.toString())).append("\n");{{/parent}}
172179
{{#vars}}sb.append(" {{name}}: ").append({{#isPassword}}"*"{{/isPassword}}{{^isPassword}}toIndentedString({{name}}){{/isPassword}}).append("\n");
173180
{{/vars}}sb.append("}");
181+
{{#additionalPropertiesType}}sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
182+
{{/additionalPropertiesType}}sb.append("}");
174183
return sb.toString();
175184
}
176185

0 commit comments

Comments
 (0)