@Override
public Object process(Object value, ValueProcessInvocation invocation) throws BeanMappingException {
if (value != null && invocation.getContext().getCurrentField().isMapping() == false) {
BeanMappingField currentField = invocation.getContext().getCurrentField();
String customConvertorName = currentField.getConvertor();
Convertor convertor = currentField.getConvertorRef();// 取上一次实例化后的convertor对象
if (convertor == null && currentField.getConvertorClass() != null) {
// 进行自定义convertor初始化
Class clazz = currentField.getConvertorClass();
convertor = (Convertor) ReflectionHelper.newInstance(clazz);
currentField.setConvertorRef(convertor);
}
if (StringUtils.isNotEmpty(customConvertorName)) { // 判断是否有自定义的convertor
convertor = ConvertorHelper.getInstance().getConvertor(customConvertorName);
} else if (convertor == null) {
// srcClass针对直接使用script的情况,会出现为空,这时候需要依赖value.getClass进行转化
// 优先不选择使用value.getClass()的原因:原生类型会返回对应的Object类型,导出会出现不必要的convertor转化
Class srcClass = currentField.getSrcField().getClazz();
if (srcClass == null || srcClass.isPrimitive() == false) {
srcClass = value.getClass();
}
Class targetClass = currentField.getTargetField().getClazz();
if (targetClass != null) {
// targetClass可能存在为空,比如这里的Value配置了DefaultValue,在MapSetExecutor解析时会无法识别TargetClass
// 无法识别后,就不做转化
convertor = ConvertorHelper.getInstance().getConvertor(srcClass, targetClass);
if (convertor == null && !targetClass.isAssignableFrom(srcClass) && logger.isWarnEnabled()) {
// 记录下日志
StringBuilder builder = new StringBuilder();
builder.append("srcName[" + currentField.getSrcField().getName());
builder.append("],srcClass[" + ObjectUtils.toString(srcClass, "null"));
builder.append("],targetName[" + currentField.getTargetField().getName());
builder.append("],targetClass[" + ObjectUtils.toString(targetClass, "null") + "]");
logger.warn(builder.toString() + " convertor is null!");
}
}
}
if (convertor != null && currentField.getTargetField().getClazz() != null) {
List<Class> componentClasses = currentField.getTargetField().getComponentClasses();
Class[] array = null;
if (componentClasses != null && componentClasses.size() > 0) {
array = componentClasses.toArray(new Class[componentClasses.size()]);
}
if (array != null && convertor instanceof CollectionConvertor) {
// 进行嵌套对象处理
value = ((CollectionConvertor) convertor).convertCollection(
currentField,
value,
currentField.getTargetField().getClazz(),
array);
} else {
value = convertor.convert(value, currentField.getTargetField().getClazz());
}
}
}
// 继续下一步的调用