我想创建一个配置文件,允许我定义不同的数据生成器,每个数据生成器都需要不同的配置。但是,它们都共享相同的方法generateRow
,因此这些类都可以实现接口。我使用Jackson版本2.9.4。
为了说明,这里有两个示例配置文件:
{
"data": {
"type": "standard",
"config": {
"rows": 1000,
"columns": 10
}
}
}
和
{
"data": {
"type": "totalSize",
"config": {
"sizeInBytes": 1073741824,
"cellDensityInBytes": 12,
"columns": 5
}
}
}
第一个数据生成器只是创建一个具有给定行数和列数的文件,第二个生成器创建一个预定义大小的文件,确定满足配置变量所需的行数(即列数)和细胞密度)。
所以,我创建了一个界面:
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = IGenerateRows.PROPERTY, defaultImpl = StandardRowGenerator.class)
@JsonSubTypes(value = { @Type(StandardRowGenerator.class) })
public interface IGenerateRows {
public static final String PROPERTY = "type";
public String[] generateRow();
}
我至少有一个具体的实现:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
@JsonTypeName(value = StandardRowGenerator.TYPE)
public class StandardRowGenerator {
public static final String TYPE = "standard";
private static final String ROWS = "rows";
private static final String COLUMNS = "columns";
@JsonProperty(value = ROWS, required = true)
private int rows;
@JsonProperty(value = COLUMNS, required = true)
private int columns;
}
我无法弄清楚的是,如何处理配置文件中数据生成器节点的config
节点。我如何正确设置我的具体类来定义生成数据所需的属性?
在我的引导代码中,我按如下方式实例化整个配置对象:
new ObjectMapper().readValue(inputStream, DataGeneratorConfig.class);
为简洁起见,我省略了getter和setter,以及配置文件的其余部分与现有问题无关。如果我可以提供任何其他详细信息或代码,请告诉我。