MappingStragety 编写 hashMap 类型的字段



我正在使用opencsv使用opencsv注释来读/写csv文件。 我的 bean 不仅有原语,还有 javaHashMap。 现在我想做的是

public class MyBean {
@CsvBindByName(column = "ID")
private int id;
@CsvBindByName(column = "PROPERTIES")
private Map<String, String> sampleMap = new HashMap<String, String>();

ID, property1, property2...
1, value1, value2.....

我想让它在读/写中工作。

据我了解,默认的映射策略在这种情况下不起作用。此外,创建自定义映射策略对HashMap字段没有意义。因为在迭代所有映射之前,我们不知道完整的字段列表。

获取列名的另一种方法是从 bean 列表中读取一个 bean。并访问HashMap,然后创建标头。(在我的情况下,哈希映射键在豆子上是固定的(

映射策略只关注类级别的元数据。比如田野等。

public static Field[] getAllFields(Class<?> cls) {
List allFieldsList = getAllFieldsList(cls);
return (Field[])allFieldsList.toArray(new Field[allFieldsList.size()]);
}

访问真实数据以创建 CSV 标头看起来不是一种自然的方法。

关于如何解决这个问题的任何建议?

请指出任何其他库,这些库可以读/写具有Map字段的 bean。

干杯!

遗憾的是,openCSV不支持此功能。 一个快速的谷歌告诉我,SuperCSV很接近,但它把所有东西都放在地图上,而你想控制地图中的内容和不显示的内容。 可能还有其他的,但大多数都需要对象中的字段和 csv 文件中的列之间进行一对一的交流。

这是我多年来一直想开发并做出贡献的东西,因为我目前工作的公司需要它,但他们不想付钱给我来开发它,而且当空闲时间可用时,我对 openCSV 有更高的优先级。

一种可能但有限的解决方法是创建我称之为数据传输对象的东西。 有一个自定义对象,该对象具有您将拥有的所有值,并让它返回所需类型的对象(或者一个转换器,它将包含所有字段的 DTO 转换为您想要的带有映射和某些字段的对象(。 此解决方案的问题在于,它迫使您提前知道地图中所有可能的条目。

最新更新