Browse Source

优化日期类型转换

zhouhao 3 years ago
parent
commit
a3543b34f2

+ 14 - 2
hsweb-core/src/main/java/org/hswebframework/web/bean/FastBeanCopier.java

@@ -88,7 +88,7 @@ public final class FastBeanCopier {
     }
 
     public static Object getProperty(Object source, String key) {
-        SingleValueMap<Object,Object> map = new SingleValueMap<>();
+        SingleValueMap<Object, Object> map = new SingleValueMap<>();
         copy(source, map, include(key));
         return map.getValue();
     }
@@ -542,7 +542,11 @@ public final class FastBeanCopier {
             }
             if (targetClass == Date.class) {
                 if (source instanceof String) {
-                    return (T) DateFormatter.fromString((String) source);
+                    T parsed = (T) DateFormatter.fromString((String) source);
+                    if (parsed == null) {
+                        return (T) converterByApache(Date.class, source);
+                    }
+                    return parsed;
                 }
                 if (source instanceof Number) {
                     return (T) new Date(((Number) source).longValue());
@@ -629,6 +633,14 @@ public final class FastBeanCopier {
             }
 //            return null;
         }
+
+        private Object converterByApache(Class<?> targetClass, Object source) {
+            org.apache.commons.beanutils.Converter converter = convertUtils.lookup(targetClass);
+            if (null != converter) {
+                return converter.convert(targetClass, source);
+            }
+            return null;
+        }
     }
 
     @AllArgsConstructor