使用Dozer进行对象copy,某些字段没有被copy的排查
先说我这边的原因:目标实体中字段
与相应的get方法的返回类型不一致
,会导致获取字段时剔除该字段,见方org.dozer.classmap.generator.BeanMappingGenerator#apply
,见destFieldNames
,当然,srcFieldNames
中可能也存在相同问题。实际是个很简单的问题,但没有往这方面考虑。
一些dozer中常见的方法调用轨迹。
在 mapGeneral
中会先将原对象的字段都收集到classMap中的fieldMaps
中,这个作为copy对象的模板。
在org.dozer.MappingProcessor#getClassMap
中会对初次加载的映射对象进行解析,在本地内存进行缓存,后续相同源对象不再进行字段解析。
字段解析方法:ClassMapBuilder#createDefaultClassMap
——>ClassMapBuilder#generateMapping
加载自定义映射:org.dozer.DozerBeanMapper#loadCustomMappings
,该map是有本地缓存。
字段解析入口方法:org.dozer.classmap.ClassMappings#find