BeanWrapperFieldSetMapper替代方案,避免setTargetType/setPrototypeBeanName

BeanWrapperFieldSetMapper alternative, to avoid setTargetType/setPrototypeBeanName

我需要一种摆脱 fieldSetMapper.setTargetType 的方法,因为我不想每次有新文件要读取时都添加 POJO。可能吗?

Springbatch 有几个 FieldSetMapper 开箱即用的实现:Documentation (FieldSetMapper)

例如,您可以使用 PassThroughFieldSetMapper 在处理器中获取 FieldSet 对象。您可以对 ArrayFieldSetMapper 执行相同的操作以获取数组对象。

但对于您的情况,我认为您需要实现自己的 FieldSetMapper。例如,它可以有一个 names 属性(带有 setter)和一个 targetClass 属性(带有 setter)。使用 Reflect,然后您可以将对象转换为您想要的 class 并根据作为参数传递的名称调用 setters。

这是 FieldSetMapper 的样子:

@Override
public Report mapFieldSet(FieldSet fieldSet) throws BindException {

    T object;
    object.setField(fieldSet.readString(0));
    return object;
}

这是 Reflect 的样子:

    Method method = object.getClass().getMethod(methodName);
    method.invoke(object);