作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在努力获得 Dozer为了一些我觉得应该很简单的事情而屈服于我的意志。我有两个类似的模型,我希望在它们之间进行映射,但是其中一个具有比另一个“更深”的层次结构,这在处理集合时给我带来了问题。考虑以下类:
源类:
class Foo {
String id;
NameGroup nameGroup;
// Setters/Getters
}
class NameGroup {
private List<Name> names;
// Setters/Getters
}
class Name {
private String nameValue;
// Setters/Getters
}
目标类:
class Bar {
private String barId;
private BarNames barNames;
// Setters/Getters
}
class BarNames {
private List<String> names;
// Setters/Getters
}
现在我想要以下单向映射:
Foo.id -> Bar.barId // Simple enough
但是我需要:
Foo.nameGroup.names.nameValue -> Bar.barNames.names
因此 Foo.nameGroup.names
中的每个 Name
实例都应该导致 String
被添加到 BarNames.names
列表。这可能吗?
最佳答案
只要您的“Name”类包含 String 构造函数,就可以使用 Dozer 轻松完成此操作。
引自 Dozer 文档 ( http://dozer.sourceforge.net/documentation/simpleproperty.html ):
Data type coversion is performed automatically by the Dozer mapping engine. Currently, Dozer supports the following types of conversions: (these are all bi-directional)
...
String to Complex Type if the Complex Type contains a String constructor
...
我已经用你上面的类测试了这个(我遇到了同样的问题)并且它工作得很好。这是我使用的映射:
<mapping>
<class-a>com.test.bar.Bar</class-a>
<class-b>com.test.foo.Foo</class-b>
<field>
<a>barId</a>
<b>id</b>
</field>
<field>
<a>barNames.names</a>
<b>nameGroup.names</b>
<a-deep-index-hint>java.lang.String</a-deep-index-hint>
<b-deep-index-hint>com.test.foo.Name</b-deep-index-hint>
</field>
</mapping>
关于java - 非平凡的推土机映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1916786/
我是一名优秀的程序员,十分优秀!