2

我正在尝试映射两个 JavaBean 结构(此处简化):

package foo;
public class Container {
    private List<Item> items;
    public List<Item> getItems() { return items; }
    public void setItems(List<Item> items) { this.items = items; }
}

public class Item {
    private String message;
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

此外,我在包中有相同属性的相同 Bean,bar并在两者之间进行映射,例如

ModelMapper mapper = new ModelMapper();
bar.Container barContainer = mapper.map(fooContainer, bar.Container.class);

其中源fooContainer包含一个项目列表,其中一些将属性message设置为 a String,其中一些具有null作为属性值。

在映射结果中,我发现列表foo.Item似乎已正确映射到第一个属性的列表bar.Item也正确映射。message但是,在具有属性值的第一项之后null,无论源属性的内容如何,​​后续项的message所有属性值都将映射到。messagenull

通过调试,我发现了原因:一旦目标属性值是null消息属性路径,在 MappingEngineImpl:207 中被标记为阴影,然后在 MappingEngineImpl:142 中的后续项目中被忽略。

这是 moddelmapper 的错误还是我必须以另一种方式配置 modelmapper 才能启用 bean 属性列表的映射?

4

1 回答 1

2

在我看来,这绝对是一个错误。实际上,我自己使用 ModelMapper 时遇到了同样的问题,这就是我发现这个问题的方式。

为 null 的着色路径似乎很危险,因为相同的上下文用于映射其他对象。我已经取消了这个功能,它似乎可以按预期工作。

我在 ModelMapper 页面上围绕这个错误创建了一个问题: http ://code.google.com/p/modelmapper/issues/detail?id=19

另外,我修复了这个问题并将其发布到 GitHub。我已经提出了一个拉取请求,希望它将被合并到下一个版本的 ModelMapper 中: https ://github.com/chrisdail/modelmapper

于 2012-07-19T11:10:38.113 回答