我正在编写一个功能来生成屏幕数据的CSV快照。
我需要这是数据驱动的。因此,我需要避免在Java中对每个快照进行硬编码,而是从数据源(如XML文件或数据库)加载它。数据包含在Java bean中。
我在2.1.0使用带有Dozer扩展的SuperCSV。
这个组合看起来很完美,因为我可以编写从bean到Dozer XML映射文件中的列的映射。
这适用于数据,但我没有找到一种方法来指定用于CSV列标题的字符串,而不是像在所有示例和测试用例中所做的那样在Java中对它们进行硬编码。我看了看。这不是数据驱动的。
我有没有办法在映射器文件中编写列标题。或者甚至从mapper文件中提取它们,构造一个List并将它们传递给writerHeader()
方法?
我认为只使用bean属性名称作为标题是可以的,尽管理想情况是我在XML的<Field>
标记中提供了一些额外的元数据表示法来指定标题。
我已经在SourceForge上发布了这个,但我在那里得到了500错误。
答案 0 :(得分:1)
我是超级CSV开发人员。你是我第一个听说过谁CsvDozerBeanWriter
使用自己的DozerBeanMapper
的人 - 很高兴听到这个功能很有用:)
那么'数据驱动'的目标是什么?听起来您希望您的代码非常通用,因此您只需更改XML即可更改CSV。是对的吗?当然,您无法动态配置单元处理器......或者您是否也尝试这样做!! ??
我会看一下Dozer的MappingMetadata API,您可以通过getMappingMetadata()
上的DozerBeanMapper
来访问该API。我从来没有使用它,但看起来你可以用这种方式派生列名称(虽然你可能只限于字段名称)。
否则,你必须自己解析XML文件(我可能会使用XPath)。如果要在XML中使用其他元数据作为列名,则必须以这种方式执行此操作。