java - 推土机:成功转换后用源值覆盖的字段
问题描述
我在使用 Dozer 时遇到了一种非常奇怪的行为。我有一个具有 2 个属性的复杂类型,需要合并到一个字符串中,这没什么疯狂的。
这是我的转换器:
@Component
public class CatalogEntryRequestRDToStringConverter extends DozerConverter<CatalogEntryRequestRD, String> {
public CatalogEntryRequestRDToStringConverter() {
super(CatalogEntryRequestRD.class, String.class);
}
public CatalogEntryRequestRDToStringConverter(Class<CatalogEntryRequestRD> prototypeA, Class<String> prototypeB) {
super(prototypeA, prototypeB);
}
@Override
public String convertTo(CatalogEntryRequestRD source, String destination) {
if (source != null) {
return ConverterUtil.concatenateCodeAndVersion(getParameter(), source.getCode(), source.getVersion());
}
return null;
}
@Override
public CatalogEntryRequestRD convertFrom(String source, CatalogEntryRequestRD destination) {
return null;
}
这是我映射这些类型的方法:
mapping(StartBorderRequest.class, StartBorderRequestMessageType.class)
.fields("request.scopeModifiers", "scopeModifiers")
.fields("request.collectedData", "collectedData")
.fields("request.selectedResponseData", "selectedResponseData");
mapping(com.test.types.CollectedDataRequestType.class, com.test.message.CollectedDataRequestType.class)
.fields("tcnType", "tcnType", fieldMappingBuilder -> {
fieldMappingBuilder.customConverter("CatalogEntryRequestRDToStringConverter");
fieldMappingBuilder.customConverterParam("tcnTypeId");
});
转换器工作。它被正确调用并且转换成功。但是,经过一些调试后,我注意到在映射过程结束时再次调用了目标字段的 set 方法,并使用 CatalogEntryRequestRD 的 toString() 方法的值。因此,我正确转换的字段被 source.toString() 覆盖。它猜想这一定与 Dozer 如何创建要映射的字段列表有关?
有没有人经历过这样的事情?
提前致谢
解决方案
推荐阅读
- r - 替换字符串中的第 n 个数字
- babeljs - Babel 插件可以扩展解析器以添加新的关键字吗?
- php - oembed_result 没有在我的 Wordpress 主题上运行
- python - 按高度/方向对图像进行排序
- php - 上传和调整图片大小问题
- sql - SQL Server 中的多表记录删除查询不正确的语法错误
- listview - 如何自动调整 ScrollView 的大小以适应 xamarin 表单中的内容
- tensorflow - 过度拟合的指示
- javascript - 无法从 sql server 获取数据到 php 页面?
- ruby - Sidekiq 中多线程上的 Selenium WebDriver