Add canonical setter for additionalProperties
salvalcantara opened this issue · comments
Problem Statement
Currently, for objects with "additionalProperties": true
, the following code gets generated:
private Map<String, Object> additionalProperties = new LinkedHashMap<~>();
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() { /* ... */ }
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) { /* ... */ }
For state schema evolution, some stream processing frameworks like Flink require POJOs to follow the Java beans naming conventions for getters and setters, e.g., see:
- https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/dev/datastream/fault-tolerance/serialization/schema_evolution/#pojo-types
- https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/dev/datastream/fault-tolerance/serialization/types_serialization/#pojos
For the case at hand this means that, to avoid trouble, the following setter should be generated:
public void setAdditionalProperties(Map<String, Object> properties) { /* ... */ }
Proposed Solution
It that makes sense in general, by default we could add the missing/canonical setter setAdditionalProperties
(acting on the entire set of properties) alongside the current one setAdditionalProperty
(acting on individual properties).
Alternatively users could manage that themselves by either providing a custom factory for the additionalProperties
or by simply ignoring any unknown properties (via @JsonIgnore
).