@@ -167,15 +167,23 @@ class {{ type_name }}Deserializer extends StdDeserializer<{{ type_name }}> {
167
167
168
168
@Override
169
169
public {{ type_name }} deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
170
- JsonNode node = p.getCodec().readTree(p);
171
-
172
- // FIXME: we are not currently handling non-string fields
170
+ {{ type_name }}Surrogate surrogate = p.getCodec().readValue(p, {{ type_name }}Surrogate.class);
173
171
{% for f in type .fields -%}
174
- {{ f.type.to_java() }} {{ f.name | to_lower_camel_case }} = node.has(" {{ f.name }}") ? node.get("{{ f.name }}").asText() : null ;
172
+ {{ f.type.to_java() }} {{ f.name | to_lower_camel_case }} = surrogate.get {{ f.name | to_upper_camel_case }}() ;
175
173
{% endfor -%}
176
- String {{ discriminator_field_name }} = node .get(" {{ type.discriminator_field }}").asText ();
177
- JsonNode {{ content_field_name }} = node .get(" {{ type.content_field }}" );
174
+ String {{ discriminator_field_name }} = surrogate .get{{ type.discriminator_field | to_upper_camel_case}} ();
175
+ JsonNode {{ content_field_name }} = surrogate .get{{ type.content_field | to_upper_camel_case}}( );
178
176
{{ type_name }}.{{ enum_type_name }} sourceType = {{ type_name }}.{{ enum_type_name }}.fromTypeAndConfig({{ discriminator_field_name }}, {{ content_field_name }});
179
- return new {{ type_name }}(name, uid, sourceType);
177
+ return new {{ type_name }}({% - for f in type .fields -%} {{ f.name | to_lower_camel_case }},{% - endfor -%} sourceType);
178
+ }
179
+
180
+ @Getter
181
+ private static class {{ type_name }}Surrogate{
182
+ {% for f in type .fields -%}
183
+ @JsonProperty("{{ f.name }}") private {{ f.type.to_java() }} {{ f.name | to_lower_camel_case }};
184
+ {% endfor -%}
185
+ @JsonProperty("{{ type.discriminator_field }}") private String {{ discriminator_field_name }};
186
+ @JsonProperty("{{ type.content_field }}") private JsonNode {{ content_field_name }};
187
+
180
188
}
181
189
}
0 commit comments