From df58ad5eff9d1a896e34348e7720fe7c46e7b690 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 26 May 2020 10:22:59 +0800 Subject: [PATCH] fix bean --- .../java/cn/hutool/core/bean/BeanUtil.java | 2 +- .../copier/provider/BeanValueProvider.java | 5 ++++- .../core/convert/AbstractConverter.java | 3 ++- .../java/cn/hutool/core/util/URLUtil.java | 20 +++++++++---------- .../cn/hutool/core/bean/BeanUtilTest.java | 1 + 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java index 45e97563d..17608fc02 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java @@ -614,7 +614,7 @@ public class BeanUtil { * @return 目标对象 */ public static T copyProperties(Object source, Class tClass) { - T target = ReflectUtil.newInstance(tClass); + T target = ReflectUtil.newInstanceIfPossible(tClass); copyProperties(source, target, CopyOptions.create()); return target; } diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java index ffc745f5e..38bab46ed 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java @@ -57,7 +57,10 @@ public class BeanValueProvider implements ValueProvider { } // 尝试将结果转换为目标类型,如果转换失败,返回原类型。 - result = Convert.convertWithCheck(valueType,result, result, ignoreError); + final Object convertValue = Convert.convertWithCheck(valueType,result, null, ignoreError); + if(null != convertValue){ + result = convertValue; + } } } return result; diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java index 11aa91d66..73aa9435e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java @@ -58,7 +58,8 @@ public abstract class AbstractConverter implements Converter, Serializable T result = convertInternal(value); return ((null == result) ? defaultValue : result); } else { - throw new IllegalArgumentException(StrUtil.format("Default value [{}] is not the instance of [{}]", defaultValue, targetType)); + throw new IllegalArgumentException( + StrUtil.format("Default value [{}]({}) is not the instance of [{}]", defaultValue, defaultValue.getClass(), targetType)); } } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java index 989c89acb..e2ebfb6b5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java @@ -783,16 +783,16 @@ public class URLUtil { *

* Data URI的格式规范: *

-	 *     data:[][;charset=][;],
+	 *     data:[<mime type>][;charset=<charset>][;<encoding>],<encoded data>
 	 * 
* * @param mimeType 可选项(null表示无),数据类型(image/png、text/plain等) * @param encoding 数据编码方式(US-ASCII,BASE64等) - * @param data 编码后的数据 + * @param data 编码后的数据 * @return Data URI字符串 * @since 5.3.6 */ - public static String getDataUri(String mimeType, String encoding, String data){ + public static String getDataUri(String mimeType, String encoding, String data) { return getDataUri(mimeType, null, encoding, data); } @@ -803,25 +803,25 @@ public class URLUtil { *

* Data URI的格式规范: *

-	 *     data:[][;charset=][;],
+	 *     data:[<mime type>][;charset=<charset>][;<encoding>],<encoded data>
 	 * 
* * @param mimeType 可选项(null表示无),数据类型(image/png、text/plain等) - * @param charset 可选项(null表示无),源文本的字符集编码方式 + * @param charset 可选项(null表示无),源文本的字符集编码方式 * @param encoding 数据编码方式(US-ASCII,BASE64等) - * @param data 编码后的数据 + * @param data 编码后的数据 * @return Data URI字符串 * @since 5.3.6 */ - public static String getDataUri(String mimeType, Charset charset, String encoding, String data){ + public static String getDataUri(String mimeType, Charset charset, String encoding, String data) { final StringBuilder builder = StrUtil.builder("data:"); - if(StrUtil.isNotBlank(mimeType)){ + if (StrUtil.isNotBlank(mimeType)) { builder.append(mimeType); } - if(null != charset){ + if (null != charset) { builder.append(";charset=").append(charset.name()); } - if(StrUtil.isNotBlank(encoding)){ + if (StrUtil.isNotBlank(encoding)) { builder.append(';').append(encoding); } builder.append(',').append(data); diff --git a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java index 1ccaa3977..6e458bece 100644 --- a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java @@ -237,6 +237,7 @@ public class BeanUtilTest { person.setOpenid("11213232"); person.setName("测试A11"); person.setSubName("sub名字"); + SubPerson person1 = BeanUtil.copyProperties(person, SubPerson.class); Assert.assertEquals(14, person1.getAge()); Assert.assertEquals("11213232", person1.getOpenid());