Skip to content

Commit e686477

Browse files
committed
java: Add support for non-string types in deserialize
1 parent 5c2dfe5 commit e686477

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

java/templates/types/struct_enum.java.jinja

+15-7
Original file line numberDiff line numberDiff line change
@@ -167,15 +167,23 @@ class {{ type_name }}Deserializer extends StdDeserializer<{{ type_name }}> {
167167

168168
@Override
169169
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);
173171
{% 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 }}();
175173
{% 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}}();
178176
{{ 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+
180188
}
181189
}

0 commit comments

Comments
 (0)