diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/CopyOptions.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/CopyOptions.java index 9072af8ed..c54bdf666 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/CopyOptions.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/CopyOptions.java @@ -63,7 +63,7 @@ public class CopyOptions implements Serializable { private BiPredicate propertiesFilter; /** - * 字段属性名和属性值编辑器,,用于自定义属性转换规则(例如驼峰转下划线等),自定义属性值转换规则(例如null转""等) + * 字段属性名和属性值编辑器,用于自定义属性转换规则(例如驼峰转下划线等),自定义属性值转换规则(例如null转""等) */ protected UnaryOperator> fieldEditor; @@ -338,6 +338,7 @@ public class CopyOptions implements Serializable { * @param value 值 * @return 是否保留 */ + @SuppressWarnings("BooleanMethodIsAlwaysInverted") protected boolean testPropertyFilter(final Field field, final Object value) { return null == this.propertiesFilter || this.propertiesFilter.test(field, value); } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/BeanConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/BeanConverter.java index db9b1d4f9..74793613a 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/BeanConverter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/BeanConverter.java @@ -23,6 +23,7 @@ import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.map.MapProxy; import org.dromara.hutool.core.reflect.ConstructorUtil; import org.dromara.hutool.core.reflect.TypeUtil; +import org.dromara.hutool.core.text.StrUtil; import java.io.Serializable; import java.lang.reflect.Type; @@ -97,6 +98,9 @@ public class BeanConverter implements Converter, Serializable { } else if (value instanceof byte[]) { // 尝试反序列化 return SerializeUtil.deserialize((byte[]) value); + } else if(StrUtil.isEmptyIfStr(value)){ + // issue#3136 + return null; } throw new ConvertException("Unsupported source type: [{}] to [{}]", value.getClass(), targetType); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/util/XmlUtil.java index f46cdcf91..ebc4131aa 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/util/XmlUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/util/XmlUtil.java @@ -20,6 +20,7 @@ import org.dromara.hutool.core.io.file.FileUtil; import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.lang.Assert; +import org.dromara.hutool.core.lang.Console; import org.dromara.hutool.core.map.BiMap; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.text.StrUtil; @@ -988,7 +989,8 @@ public class XmlUtil { } /** - * XML转Java Bean + * XML转Java Bean
+ * 如果XML根节点只有一个,且节点名和Bean的名称一致,则直接转换子节点 * * @param bean类型 * @param node XML节点 diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/util/Issue3136Test.java b/hutool-core/src/test/java/org/dromara/hutool/core/util/Issue3136Test.java new file mode 100755 index 000000000..84fabbcd4 --- /dev/null +++ b/hutool-core/src/test/java/org/dromara/hutool/core/util/Issue3136Test.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.util; + +import lombok.Data; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * https://github.com/dromara/hutool/issues/3136 + */ +public class Issue3136Test { + + @Test + void xmlToBeanTest() { + final String xmlStr = "02"; + final SmsRes smsRes = XmlUtil.xmlToBean(XmlUtil.parseXml(xmlStr).getDocumentElement(), SmsRes.class); + + Assertions.assertEquals("02", smsRes.getCode()); + Assertions.assertNull(smsRes.getMessage()); + } + + @Data + static class SmsRes { + /** + * 状态码. + */ + private String code; + + /** + * 消息. + */ + private Message message; + } + + @Data + static class Message { + + /** + * 消息项. + */ + private List item = new ArrayList<>(); + } + + @Data + static class MessageItem { + + /** + * 手机号. + */ + private String desmobile; + /** + * 消息id. + */ + private String msgid; + } +} diff --git a/hutool-extra/src/test/java/org/dromara/hutool/extra/qrcode/Issue3146Test.java b/hutool-extra/src/test/java/org/dromara/hutool/extra/qrcode/Issue3146Test.java new file mode 100755 index 000000000..b9150201e --- /dev/null +++ b/hutool-extra/src/test/java/org/dromara/hutool/extra/qrcode/Issue3146Test.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.extra.qrcode; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.io.File; + +public class Issue3146Test { + + @Test + @Disabled + void generateTest() { + QrCodeUtil.generate("https://www.baidu.com/h5/monitorfile/index.html?sadfsfasdfsafsafasfasfsafasfasdfsafdsafsfasfafsfaasfsdfsfsafasfa", + QrConfig.of().setWidth(600).setHeight(600).setMargin(0), new File("d:/test/issue3146.jpg")); + } +}