【发布时间】:2020-02-05 12:08:02
【问题描述】:
假设我有:
- ObjectWithList、ListWrapper 和 ObjectWithWrapper 类,如下所示:
//com.github.komidawi.ObjectWithList
public class ObjectWithList {
private List<String> list;
// ...
}
//com.github.komidawi.ListWrapper
public class ListWrapper {
private List<String> wrappedList;
// ...
}
//com.github.komidawi.ObjectWithWrapper
public class ObjectWithWrapper {
private ListWrapper list;
// ...
}
MyCustomConverter 类来包装/解包这些列表。
mapperConfiguration.xml配置文件
<!-- ... -->
<configuration>
<stop-on-errors>true</stop-on-errors>
<wildcard>true</wildcard>
<custom-converters>
<converter type="com.github.komidawi.MyCustomConverter">
<class-a>com.github.komidawi.ListWrapper</class-a>
<class-b>java.util.List</class-b>
</converter>
</custom-converters>
</converter>
<mapping>
<class-a>com.github.komidawi.ObjectWithList</class-a>
<class-b>com.github.komidawi.ObjectWithWrapper</class-b>
</mapping>
我想将 ObjectWithWrapper 映射到 ObjectWithList:
// ... creating objects
ObjectWithList objectWithList = mapper.map(objectWithWrapper, ObjectWithList.class);
objectWithList.getList(); // This is null
很遗憾,映射后objectWithList的list字段为null。 我使用了调试器,在这种情况下,Dozer 甚至没有输入 MyCustomConverter。
令人惊讶的是,不同方向的映射工作正常:
ObjectWithWrapper objecthWithWrapper = mapper.map(objectWithList, ObjectWithWrapper.class);
objecthWithWrapper.getList(); // This is not null
总结:
- ObjectWithList 和 ObjectWithWrapper 中的字段名称相同:list
- 我已经在 xml 文件中为 Java 的 List 和 ListWrapper 指定了自定义转换器
- 我已经在 xml 文件中指定了 ObjectWithList 和 ObjectWithWrapper 之间的映射
- 在这两种情况下,Dozer 都会说:“从 URL 成功加载自定义 xml 映射”
- 当从 ObjectWithList 映射到 ObjectWithWrapper 时,它工作正常
而问题是:
映射后,objectWithList 有 null 而不是实际的列表。我发现它甚至没有进入 MyCustomConverter
【问题讨论】:
标签: java mapping converters dozer mapper