【问题标题】:SuperCSV with Dozer - How to map to a List of Lists?SuperCSV with Dozer - 如何映射到列表列表?
【发布时间】:2015-01-07 13:43:44
【问题描述】:

将 SuperCSV 与 Dozer(版本 2.2.0)一起使用,我已经能够成功地将数据映射到 List。但是,我现在有一个案例,我想映射到ListLists。在我试图映射到的对象中,我有一个看起来像这样的字段:

List<List<String>> myListOfLists;

对于我的字段映射,我这样做了:

“myListOfLists[0][0]”、“myListOfLists[0][1]”、“myListOfLists[1][0]”等

但是,这会导致以下错误:

org.dozer.MappingException:找不到字段的读取或写入方法 (myListOfLists[0]) 在类(类 com.foo.MyClassBeingMappedTo)

我似乎找不到任何嵌套集合的示例,但似乎这应该是可能的。有没有办法将数据映射到我的List&lt;List&lt;String&gt;&gt; 字段?

【问题讨论】:

  • 我认为这是 Dozer 的一个限制——我认为它不能处理嵌套列表。你认为你可以使用myListOfLists[0].[0],但它似乎完全忽略了尾随的.[0],当你访问你的列表时导致ClassCastException(因为它实际上是一个字符串!)。

标签: csv dozer supercsv


【解决方案1】:

我通过为我的内部 List 创建一个包装类来解决这个问题。我创建了一个这样的内部类:

public static class InnerListWrapper
{
    private List<String> innerList;

    public List<String> getInnerList()
    {
        return innerList;
    }
    public void setInnerList(List<String> innerList)
    {
        this.innerList = innerList;
    }
}

那么我的外层List是这样的:

List<InnerListWrapper> myListOfLists;

那么字段映射就是“myListOfLists[0].innerList[0]”、“myListOfLists[0].innerList[1]”、“”myListOfLists[1].innerList[0]”等。

不是最干净的,但就像上面的评论所说,Dozer 似乎不支持嵌套列表。所以你必须在两者之间添加另一个类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多