在我們的 restAPI 中,我們將獲得一個復雜的 JSON 有效負載并將其映射到 POJO。并基于 avro avsc 模式檔案,我使用 avro-maven-plugin 生成一些 avro 模式類。
我的問題是,當我們使用 KafkaTemplate 向 kafka 和模式注冊表發送訊息時,我們需要使用 avro 模式物件發送。由于欄位數量眾多,我們無法手動將負載請求物件中的值映射到 avro 模式物件中。
uj5u.com熱心網友回復:
將任何 pojo 類轉換為 avro genric 記錄的兩個步驟
使用 jackson/avro,通過 Avro Mapper 將 pojo 轉換為位元組。
使用 Avro GenericDatumReader 將其作為通用記錄讀取。
public class AvroConverter{
public static GenericRecord convertToGenericRecord(String schemaPath, SomeClass someObject){
Schema schema = new Schema.Parser().setValidate(true).parse(new ClassPathResource(schemaPath).getFile());
AvroSchema avSchema = new AvroSchema(schema);
ObjectWritter writter = new AvroMapper().writer(avSchema);
final byte[] bytes = objectWriter.writeValueAsBytes(someObject);
GenericDatumReader<Object> genericRecordReader = new GenericDatumReader<>(avSchema);
return (GenericRecord) genericRecordReader.read(null, DecoderFactory.get().binaryDecoder(bytes, null));
}
}
Gradle 依賴
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-avro'
在進行序列化時,您可能會遇到問題。為此,您必須配置 avro 映射器屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477092.html
上一篇:如何修復“需要SockJsMessageCodec但不可用”
下一篇:Maven:如何排除目錄模式?