Hi All, I have a serialized avro binary data represented by byte[] where one of the field is long with a logical type of TimeStamp.
Timestamp tsp = new Timestamp(1530228588182l); Schema schema = SchemaBuilder.builder() .record("hello") .fields() .name("tsp").type(LogicalTypes.timestampMillis().addToSchema(Schema.create(Schema.Type.LONG))).noDefault() .endRecord(); System.out.println(schema.toString()); GenericRecord genericRecord = new GenericData.Record(schema); genericRecord.put("tsp",tsp.getTime()); I serialized the above generic record to byte[] and used below two methods to deserialize but both of them produce invalid JSON. public static GenericRecord deserialize(final Schema schema, byte[] data) throws IOException { final GenericData genericData = new GenericData(); genericData.addLogicalTypeConversion(new TimeConversions.TimestampConversion()); genericData.addLogicalTypeConversion(new TimeConversions.TimeConversion()); try (final InputStream is = new ByteArrayInputStream(data)) { final Decoder decoder = DecoderFactory.get().binaryDecoder(is, null); final DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema, schema, genericData); return reader.read(null, decoder); } } This produces {"tsp": 2018-06-28T23:29:48.182Z} this is not a valid json so I also tried the following public static GenericRecord deserialize(final Schema schema, byte[] data) throws IOException { final GenericData genericData = new GenericData(){ @Override public String toString(Object datum) { StringBuilder buffer = new StringBuilder(); // Since these types are not quoted and produce a malformed JSON string, quote it here. if (datum instanceof java.sql.Timestamp || datum instanceof java.sql.Time || datum instanceof java.sql.Date) { return buffer.append("\"").append(datum).append("\"").toString(); } return super.toString(datum); } }; genericData.addLogicalTypeConversion(new TimeConversions.TimestampConversion()); genericData.addLogicalTypeConversion(new TimeConversions.TimeConversion()); try (final InputStream is = new ByteArrayInputStream(data)) { final Decoder decoder = DecoderFactory.get().binaryDecoder(is, null); final DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema, schema, genericData); return reader.read(null, decoder); } } I still get {"tsp": 2018-06-28T23:29:48.182Z} this is not a valid json Expected output: {"tsp": "2018-06-28T23:29:48.182Z"} Any ideas? Thanks!