我需要从现有的 Java 模型生成 AVRO 模式。然后我想使用该模式来生成 Java 对象,这样我就可以用生成的模型替换我现有的模型,从而使该模式成为事实的来源。
我遇到了一个问题,我将尝试用这个例子来说明。
我有一个基本的 Java 类:
public class Car {
private String price;
private String engine;
public Car(String price, String engine) {
this.price = price;
this.engine = engine;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getEngine() {
return engine;
}
public void setEngine(String engine) {
this.engine = engine;
}
}
我想生成一个代表这个类的 avro 模式。
public static void main(String[] args) throws JsonMappingException {
System.out.println(generateAvroSchema());
}
public static String generateAvroSchema() throws JsonMappingException {
ObjectMapper mapper = new ObjectMapper(new AvroFactory());
AvroSchemaGenerator gen = new AvroSchemaGenerator();
mapper.acceptJsonFormatVisitor(Car.class, gen);
Schema schema = gen.getGeneratedSchema().getAvroSchema();
return schema.toString(true);
}
结果是:
{
"type" : "record",
"name" : "Car",
"namespace" : "app",
"fields" : [ {
"name" : "engine",
"type" : [ "null", "string" ]
}, {
"name" : "price",
"type" : [ "null", "string" ]
} ]
}
生成模式时,对象属性按字母顺序排列。如果我要使用这个模式来生成一个新的 java 模型,构造函数参数的顺序将与源不同。
我的问题是,在生成模式以保留属性顺序而不默认为字母顺序时,是否可以使用任何配置?
谢谢