This commit is contained in:
Looly
2022-09-05 02:37:04 +08:00
parent d033b1ec0f
commit 054f3fbf61
6 changed files with 17 additions and 66 deletions

View File

@@ -285,8 +285,8 @@ public class ConverterRegistry implements Serializable {
final Class<?> clazz = ClassLoaderUtil.loadClass("cn.hutool.json.BeanConverterForJSON");
return ((Converter<T>)ReflectUtil.newInstance(clazz, type)).convert(value, defaultValue);
}catch (final Throwable ignore){
return new BeanConverter<T>(type).convert(value, defaultValue);
}
return new BeanConverter<T>(type).convert(value, defaultValue);
}
// 无法转换

View File

@@ -31,7 +31,7 @@ public class BeanConverter<T> extends AbstractConverter<T> {
private final Type beanType;
private final Class<T> beanClass;
protected CopyOptions copyOptions;
private final CopyOptions copyOptions;
/**
* 构造,默认转换选项,注入失败的字段忽略

View File

@@ -1,6 +1,8 @@
package cn.hutool.core.convert.impl;
import cn.hutool.core.convert.AbstractConverter;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.convert.ConvertException;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -23,6 +25,7 @@ import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
/**
@@ -109,6 +112,17 @@ public class TemporalAccessorConverter extends AbstractConverter<TemporalAccesso
} else if (value instanceof Calendar) {
final Calendar calendar = (Calendar) value;
return parseFromInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId());
} else if (value instanceof Map) {
final Map<?, ?> map = (Map<?, ?>) value;
if (LocalDate.class.equals(this.targetType)) {
return LocalDate.of(Convert.toInt(map.get("year")), Convert.toInt(map.get("month")), Convert.toInt(map.get("day")));
} else if (LocalDateTime.class.equals(this.targetType)) {
return LocalDateTime.of(Convert.toInt(map.get("year")), Convert.toInt(map.get("month")), Convert.toInt(map.get("day")),
Convert.toInt(map.get("hour")), Convert.toInt(map.get("minute")), Convert.toInt(map.get("second")), Convert.toInt(map.get("second")));
} else if (LocalTime.class.equals(this.targetType)) {
return LocalTime.of(Convert.toInt(map.get("hour")), Convert.toInt(map.get("minute")), Convert.toInt(map.get("second")), Convert.toInt(map.get("nano")));
}
throw new ConvertException("Unsupported type: [{}] from map: [{}]", this.targetType, map);
} else {
return parseFromCharSequence(convertToStr(value));
}