diff --git a/CHANGELOG.md b/CHANGELOG.md index 8476e6549..c7dd97d67 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,10 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.30(2024-07-10) +# 5.8.30(2024-07-11) ### 🐣新特性 +* 【core 】 Converter转换规则变更,空对象、空值转为Bean时,创建默认对象,而非null(issue#3649@Github) ### 🐞Bug修复 * 【core 】 修复因RFC3986理解有误导致的UrlPath处理冒号转义问题(issue#IAAE88@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java index 4cfeca0ce..41c262934 100755 --- a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java @@ -3,6 +3,7 @@ package cn.hutool.core.convert; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.impl.*; import cn.hutool.core.date.DateTime; +import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Opt; import cn.hutool.core.lang.Pair; import cn.hutool.core.lang.TypeReference; @@ -340,6 +341,12 @@ public class ConverterRegistry implements Serializable { return (T) converter.convert(value, (Class) defaultValue); } + // 空值转空Bean + if(ObjectUtil.isEmpty(value)){ + // issue#3649 空值转空对象,则直接实例化 + return (T) ReflectUtil.newInstanceIfPossible(rowType); + } + // 表示非需要特殊转换的对象 return null; } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java b/hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java index 06c6c7649..e3adac333 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java @@ -33,7 +33,8 @@ public class Issue3136Test { final SmsRes smsRes = XmlUtil.xmlToBean(XmlUtil.parseXml(xmlStr).getDocumentElement(), SmsRes.class); Assert.assertEquals("02", smsRes.getCode()); - Assert.assertNull(smsRes.getMessage()); + Assert.assertNotNull(smsRes.getMessage()); + Assert.assertEquals(new Message(), smsRes.getMessage()); } @Data diff --git a/hutool-json/src/test/java/cn/hutool/json/Issue3649Test.java b/hutool-json/src/test/java/cn/hutool/json/Issue3649Test.java new file mode 100644 index 000000000..614f0a011 --- /dev/null +++ b/hutool-json/src/test/java/cn/hutool/json/Issue3649Test.java @@ -0,0 +1,17 @@ +package cn.hutool.json; + +import lombok.Data; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class Issue3649Test { + @Test + public void toEmptyBeanTest() { + final Object bean = JSONUtil.toBean("{}", JSONConfig.create().setIgnoreError(true), EmptyBean.class); + assertEquals(new EmptyBean(), bean); + } + + @Data + public static class EmptyBean {} +}