我希望创建一个配置文件,允许我定义不同的数据生成器,每个生成器都需要不同的配置。但是,它们都共享相同的方法
为了说明,这里有两个示例配置文件:
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以及其余与问题无关的配置文件。如果需要更多细节或代码,请告诉我。