我有一个UserDTO,它有userID字段。 HashMap将此DTO作为关键User_Details的值。
我想使用DOZER映射将userID属性从 HashMap-> User_Details-> userId 设置为属性 UserDisplayDTO-> userId 。
如何在Dozer XML映射中执行此操作?
<mapping map-id="testMapping">
<class-a>java.util.HashMap</class-a>
<class-b>com.common.dto.UserDisplayDTO</class-b>
<field>
<a key="User_Details">this</a>
<b>userId</b>
</field>
</mapping>
答案 0 :(得分:1)
您必须为此定义custom converter。 dom,dozer xml映射不支持基于键的hashmap查找。
因此,对于您的情况,您需要类似
的内容<field custom-converter="com.your.custom.converter.UserIdConverter">
<a>hashmapfield</a>
<b>userId</b>
</field>
在UserIdConverter实现中,您必须从hashmap中检索值并返回它(为了清楚起见省略了null检查等):
@Override
public Long convertTo(HashMap map, Long userId) {
UserDTO dto = (UserDTO)map.get("User_Details");
return dto.getUserId();
}