joelittlejohn / jsonschema2pojo

Generate Java types from JSON or JSON Schema and annotate those types for data-binding with Jackson, Gson, etc
http://www.jsonschema2pojo.org
Apache License 2.0
6.24k stars 1.66k forks source link

Add canonical setter for additionalProperties #1589

Open salvalcantara opened 9 months ago

salvalcantara commented 9 months ago

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:

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).