我正在尝试映射两个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; }
}
此外,我在包bar
中具有相同属性的相同Bean,并在两者之间进行映射
ModelMapper mapper = new ModelMapper();
bar.Container barContainer = mapper.map(fooContainer, bar.Container.class);
源fooContainer
包含项目列表,其中一些项目的属性message
设置为String
,其中一些项目的属性值为null
。< / p>
在映射结果中,我发现foo.Item
列表似乎已正确映射到bar.Item
列表,同时正确映射了第一个message
属性。但是,在null
属性的message
值的第一个项之后,无论源属性的内容如何,以下项的所有message
属性值都将映射到null
。
通过调试我发现了原因:
目标属性值为null
后,消息属性路径在MappingEngineImpl:207中标记为阴影,然后对MappingEngineImpl中的后续项目进行忽略:142。
这是moddelmapper的错误还是我必须以另一种方式配置modelmapper以启用bean属性列表的映射?
答案 0 :(得分:2)
绝对看起来像是一个错误。我实际上在使用ModelMapper时遇到了同样的问题,这就是我发现这个问题的方法。
由于使用相同的上下文来映射其他对象,因此着色为null的路径似乎很危险。我已经取消了这个功能,它似乎按预期工作。
我在ModelMapper页面上围绕此错误创建了一个问题: http://code.google.com/p/modelmapper/issues/detail?id=19
另外,我修复了问题并将其发布到GitHub。我已经发出拉取请求,希望它将被合并到下一版本的ModelMapper中: https://github.com/chrisdail/modelmapper