Skip to content

Commit 07f39f1

Browse files
authored
feat!: add jackson annotations additionalProperties (#2103)
1 parent e30832c commit 07f39f1

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

examples/java-generate-jackson-annotation/__snapshots__/index.spec.ts.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Array [
99
@JsonProperty(\\"max_number_prop\\")
1010
@JsonInclude(JsonInclude.Include.NON_NULL)
1111
private Double maxNumberProp;
12+
@JsonAnySetter
1213
@JsonInclude(JsonInclude.Include.NON_NULL)
1314
private Map<String, Object> additionalProperties;
1415
@@ -18,6 +19,7 @@ Array [
1819
public Double getMaxNumberProp() { return this.maxNumberProp; }
1920
public void setMaxNumberProp(Double maxNumberProp) { this.maxNumberProp = maxNumberProp; }
2021
22+
@JsonAnyGetter
2123
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
2224
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
2325
}",

src/generators/java/presets/JacksonPreset.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export const JAVA_JACKSON_PRESET: JavaPreset = {
3535
const blocks: string[] = [];
3636

3737
if (hasUnwrappedOptions) {
38+
blocks.push(renderer.renderAnnotation('JsonAnySetter'));
3839
if (!property.required) {
3940
blocks.push(
4041
renderer.renderAnnotation(
@@ -67,6 +68,24 @@ export const JAVA_JACKSON_PRESET: JavaPreset = {
6768

6869
blocks.push(content);
6970

71+
return renderer.renderBlock(blocks);
72+
},
73+
getter({ renderer, property, content, model }) {
74+
if (model.options.isExtended) {
75+
return content;
76+
}
77+
//Properties that are dictionaries with unwrapped options, cannot get the annotation because it cannot be accurately unwrapped by the jackson library.
78+
const isDictionary =
79+
property.property instanceof ConstrainedDictionaryModel;
80+
const hasUnwrappedOptions =
81+
isDictionary &&
82+
(property.property as ConstrainedDictionaryModel).serializationType ===
83+
'unwrap';
84+
const blocks: string[] = [];
85+
if (hasUnwrappedOptions) {
86+
blocks.push(renderer.renderAnnotation('JsonAnyGetter'));
87+
}
88+
blocks.push(content);
7089
return renderer.renderBlock(blocks);
7190
}
7291
},

test/generators/java/__snapshots__/JavaGenerator.spec.ts.snap

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public interface Pet {
2929
@JsonProperty(\\"test\\")
3030
@JsonInclude(JsonInclude.Include.NON_NULL)
3131
private TestAllOf test;
32+
@JsonAnySetter
3233
@JsonInclude(JsonInclude.Include.NON_NULL)
3334
private Map<String, Object> additionalProperties;
3435
@@ -49,6 +50,7 @@ public interface Pet {
4950
public TestAllOf getTest() { return this.test; }
5051
public void setTest(TestAllOf test) { this.test = test; }
5152
53+
@JsonAnyGetter
5254
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
5355
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
5456
@@ -163,6 +165,7 @@ public interface Pet {
163165
@JsonProperty(\\"test_string\\")
164166
@JsonInclude(JsonInclude.Include.NON_NULL)
165167
private String testString;
168+
@JsonAnySetter
166169
@JsonInclude(JsonInclude.Include.NON_NULL)
167170
private Map<String, Object> additionalProperties;
168171
@@ -172,6 +175,7 @@ public interface Pet {
172175
public String getTestString() { return this.testString; }
173176
public void setTestString(String testString) { this.testString = testString; }
174177
178+
@JsonAnyGetter
175179
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
176180
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
177181
@@ -264,6 +268,7 @@ public interface Pet {
264268
@JsonProperty(\\"sequence_type\\")
265269
@JsonInclude(JsonInclude.Include.NON_NULL)
266270
private CloudEventDotSequenceType sequenceType;
271+
@JsonAnySetter
267272
@JsonInclude(JsonInclude.Include.NON_NULL)
268273
private Map<String, Object> additionalProperties;
269274
@@ -278,6 +283,7 @@ public interface Pet {
278283
public CloudEventDotSequenceType getSequenceType() { return this.sequenceType; }
279284
public void setSequenceType(CloudEventDotSequenceType sequenceType) { this.sequenceType = sequenceType; }
280285
286+
@JsonAnyGetter
281287
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
282288
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
283289
@@ -391,6 +397,7 @@ Array [
391397
@JsonProperty(\\"event_time\\")
392398
@JsonInclude(JsonInclude.Include.NON_NULL)
393399
private java.time.OffsetDateTime eventTime;
400+
@JsonAnySetter
394401
@JsonInclude(JsonInclude.Include.NON_NULL)
395402
private Map<String, Object> additionalProperties;
396403
@@ -400,6 +407,7 @@ Array [
400407
public java.time.OffsetDateTime getEventTime() { return this.eventTime; }
401408
public void setEventTime(java.time.OffsetDateTime eventTime) { this.eventTime = eventTime; }
402409
410+
@JsonAnyGetter
403411
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
404412
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
405413
@@ -507,6 +515,7 @@ public interface Pet {
507515
@JsonProperty(\\"time\\")
508516
@JsonInclude(JsonInclude.Include.NON_NULL)
509517
private java.time.OffsetDateTime time;
518+
@JsonAnySetter
510519
@JsonInclude(JsonInclude.Include.NON_NULL)
511520
private Map<String, Object> additionalProperties;
512521
@@ -526,6 +535,7 @@ public interface Pet {
526535
public java.time.OffsetDateTime getTime() { return this.time; }
527536
public void setTime(java.time.OffsetDateTime time) { this.time = time; }
528537
538+
@JsonAnyGetter
529539
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
530540
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
531541
@@ -625,6 +635,7 @@ public interface Pet {
625635
@JsonProperty(\\"time\\")
626636
@JsonInclude(JsonInclude.Include.NON_NULL)
627637
private java.time.OffsetDateTime time;
638+
@JsonAnySetter
628639
@JsonInclude(JsonInclude.Include.NON_NULL)
629640
private Map<String, Object> additionalProperties;
630641
@@ -644,6 +655,7 @@ public interface Pet {
644655
public java.time.OffsetDateTime getTime() { return this.time; }
645656
public void setTime(java.time.OffsetDateTime time) { this.time = time; }
646657
658+
@JsonAnyGetter
647659
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
648660
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
649661
@@ -707,6 +719,7 @@ Array [
707719
@NotNull
708720
@JsonProperty(\\"type\\")
709721
private final CloudEventType type = CloudEventType.DOG;
722+
@JsonAnySetter
710723
@JsonInclude(JsonInclude.Include.NON_NULL)
711724
private Map<String, Object> additionalProperties;
712725
@@ -715,6 +728,7 @@ Array [
715728
716729
public CloudEventType getType() { return this.type; }
717730
731+
@JsonAnyGetter
718732
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
719733
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
720734
@@ -807,11 +821,13 @@ public interface Pet {
807821
@NotNull
808822
@JsonProperty(\\"type\\")
809823
private final DogType type = DogType.DOG;
824+
@JsonAnySetter
810825
@JsonInclude(JsonInclude.Include.NON_NULL)
811826
private Map<String, Object> additionalProperties;
812827
813828
public DogType getType() { return this.type; }
814829
830+
@JsonAnyGetter
815831
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
816832
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
817833
@@ -886,11 +902,13 @@ public interface Pet {
886902
@NotNull
887903
@JsonProperty(\\"type\\")
888904
private final CatType type = CatType.CAT;
905+
@JsonAnySetter
889906
@JsonInclude(JsonInclude.Include.NON_NULL)
890907
private Map<String, Object> additionalProperties;
891908
892909
public CatType getType() { return this.type; }
893910
911+
@JsonAnyGetter
894912
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
895913
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
896914
@@ -981,12 +999,14 @@ public interface Vehicle {
981999
@JsonProperty(\\"vehicle\\")
9821000
@JsonInclude(JsonInclude.Include.NON_NULL)
9831001
private Vehicle vehicle;
1002+
@JsonAnySetter
9841003
@JsonInclude(JsonInclude.Include.NON_NULL)
9851004
private Map<String, Object> additionalProperties;
9861005
9871006
public Vehicle getVehicle() { return this.vehicle; }
9881007
public void setVehicle(Vehicle vehicle) { this.vehicle = vehicle; }
9891008
1009+
@JsonAnyGetter
9901010
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
9911011
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
9921012
@@ -1032,11 +1052,13 @@ public interface Vehicle {
10321052
@NotNull
10331053
@JsonProperty(\\"vehicleType\\")
10341054
private final VehicleType vehicleType = VehicleType.CAR;
1055+
@JsonAnySetter
10351056
@JsonInclude(JsonInclude.Include.NON_NULL)
10361057
private Map<String, Object> additionalProperties;
10371058
10381059
public VehicleType getVehicleType() { return this.vehicleType; }
10391060
1061+
@JsonAnyGetter
10401062
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
10411063
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
10421064
@@ -1111,11 +1133,13 @@ public interface Vehicle {
11111133
@NotNull
11121134
@JsonProperty(\\"vehicleType\\")
11131135
private final VehicleType vehicleType = VehicleType.TRUCK;
1136+
@JsonAnySetter
11141137
@JsonInclude(JsonInclude.Include.NON_NULL)
11151138
private Map<String, Object> additionalProperties;
11161139
11171140
public VehicleType getVehicleType() { return this.vehicleType; }
11181141
1142+
@JsonAnyGetter
11191143
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
11201144
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
11211145

test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Array [
66
@JsonProperty(\\"extendProp\\")
77
@JsonInclude(JsonInclude.Include.NON_NULL)
88
private String extendProp;
9+
@JsonAnySetter
910
@JsonInclude(JsonInclude.Include.NON_NULL)
1011
private Map<String, Object> additionalProperties;
1112
@@ -14,6 +15,7 @@ Array [
1415
@Override
1516
public void setExtendProp(String extendProp) { this.extendProp = extendProp; }
1617
18+
@JsonAnyGetter
1719
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
1820
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
1921
}",
@@ -31,6 +33,7 @@ exports[`JAVA_JACKSON_PRESET should render Jackson annotations for class 1`] = `
3133
@JsonProperty(\\"max_number_prop\\")
3234
@JsonInclude(JsonInclude.Include.NON_NULL)
3335
private Double maxNumberProp;
36+
@JsonAnySetter
3437
@JsonInclude(JsonInclude.Include.NON_NULL)
3538
private Map<String, Object> additionalProperties;
3639
@@ -40,6 +43,7 @@ exports[`JAVA_JACKSON_PRESET should render Jackson annotations for class 1`] = `
4043
public Double getMaxNumberProp() { return this.maxNumberProp; }
4144
public void setMaxNumberProp(Double maxNumberProp) { this.maxNumberProp = maxNumberProp; }
4245
46+
@JsonAnyGetter
4347
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
4448
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
4549
}"
@@ -97,6 +101,7 @@ public interface Vehicle {
97101
@JsonProperty(\\"name\\")
98102
@JsonInclude(JsonInclude.Include.NON_NULL)
99103
private String name;
104+
@JsonAnySetter
100105
@JsonInclude(JsonInclude.Include.NON_NULL)
101106
private Map<String, Object> additionalProperties;
102107
@@ -106,6 +111,7 @@ public interface Vehicle {
106111
public String getName() { return this.name; }
107112
public void setName(String name) { this.name = name; }
108113
114+
@JsonAnyGetter
109115
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
110116
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
111117
}",
@@ -116,6 +122,7 @@ public interface Vehicle {
116122
@JsonProperty(\\"name\\")
117123
@JsonInclude(JsonInclude.Include.NON_NULL)
118124
private String name;
125+
@JsonAnySetter
119126
@JsonInclude(JsonInclude.Include.NON_NULL)
120127
private Map<String, Object> additionalProperties;
121128
@@ -125,6 +132,7 @@ public interface Vehicle {
125132
public String getName() { return this.name; }
126133
public void setName(String name) { this.name = name; }
127134
135+
@JsonAnyGetter
128136
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
129137
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
130138
}",
@@ -148,25 +156,29 @@ public interface Vehicle {
148156
@JsonProperty(\\"vehicleType\\")
149157
@JsonInclude(JsonInclude.Include.NON_NULL)
150158
private String vehicleType;
159+
@JsonAnySetter
151160
@JsonInclude(JsonInclude.Include.NON_NULL)
152161
private Map<String, Object> additionalProperties;
153162
154163
public String getVehicleType() { return this.vehicleType; }
155164
public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; }
156165
166+
@JsonAnyGetter
157167
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
158168
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
159169
}",
160170
"public class Truck implements Vehicle {
161171
@JsonProperty(\\"vehicleType\\")
162172
@JsonInclude(JsonInclude.Include.NON_NULL)
163173
private String vehicleType;
174+
@JsonAnySetter
164175
@JsonInclude(JsonInclude.Include.NON_NULL)
165176
private Map<String, Object> additionalProperties;
166177
167178
public String getVehicleType() { return this.vehicleType; }
168179
public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; }
169180
181+
@JsonAnyGetter
170182
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
171183
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
172184
}",
@@ -190,25 +202,29 @@ public interface Vehicle {
190202
@JsonProperty(\\"vehicleType\\")
191203
@JsonInclude(JsonInclude.Include.NON_NULL)
192204
private String vehicleType;
205+
@JsonAnySetter
193206
@JsonInclude(JsonInclude.Include.NON_NULL)
194207
private Map<String, Object> additionalProperties;
195208
196209
public String getVehicleType() { return this.vehicleType; }
197210
public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; }
198211
212+
@JsonAnyGetter
199213
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
200214
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
201215
}",
202216
"public class Truck implements Vehicle {
203217
@JsonProperty(\\"vehicleType\\")
204218
@JsonInclude(JsonInclude.Include.NON_NULL)
205219
private String vehicleType;
220+
@JsonAnySetter
206221
@JsonInclude(JsonInclude.Include.NON_NULL)
207222
private Map<String, Object> additionalProperties;
208223
209224
public String getVehicleType() { return this.vehicleType; }
210225
public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; }
211226
227+
@JsonAnyGetter
212228
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
213229
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
214230
}",
@@ -232,25 +248,29 @@ public interface Vehicle {
232248
@JsonProperty(\\"passengers\\")
233249
@JsonInclude(JsonInclude.Include.NON_NULL)
234250
private String passengers;
251+
@JsonAnySetter
235252
@JsonInclude(JsonInclude.Include.NON_NULL)
236253
private Map<String, Object> additionalProperties;
237254
238255
public String getPassengers() { return this.passengers; }
239256
public void setPassengers(String passengers) { this.passengers = passengers; }
240257
258+
@JsonAnyGetter
241259
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
242260
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
243261
}",
244262
"public class Truck implements Vehicle {
245263
@JsonProperty(\\"cargo\\")
246264
@JsonInclude(JsonInclude.Include.NON_NULL)
247265
private String cargo;
266+
@JsonAnySetter
248267
@JsonInclude(JsonInclude.Include.NON_NULL)
249268
private Map<String, Object> additionalProperties;
250269
251270
public String getCargo() { return this.cargo; }
252271
public void setCargo(String cargo) { this.cargo = cargo; }
253272
273+
@JsonAnyGetter
254274
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
255275
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
256276
}",

0 commit comments

Comments
 (0)