Возникает проблема при преобразовании JSONObject в GenericRecord для свойства пустого поля по умолчанию в Java.
У меня есть схема ниже.
org.apache.avro.Schema = {"type":"record","name":"Foo","namespace":"$iw","fields":[{"name":"bar","type":{"type": "string", "avro.java.string": "String"},"default": null}]}
Если я предоставляю правильное значение, он успешно запущен
String json1 = {"bar": "baz"}
GenericDatumReader reader = new GenericDatumReader<>(STREAM_VALUE_SCHEMA);
Decoder jsonDecoder = DecoderFactory.get().jsonDecoder(Schema, json2.toString());
GenericRecord record = reader.read(null, jsonDecoder);
Когда я указал ниже строку
String json2 = "{}";
GenericDatumReader reader = new GenericDatumReader<>(STREAM_VALUE_SCHEMA);
Decoder jsonDecoder = DecoderFactory.get().jsonDecoder(Schema, json2.toString());
GenericRecord record = reader.read(null, jsonDecoder);
Я получаю ниже исключения: -
Expected string. Got END_OBJECT
org.apache.avro.AvroTypeException: Expected string. Got END_OBJECT
at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:698)
at org.apache.avro.io.JsonDecoder.readString(JsonDecoder.java:227)
Справка действительно!