This commit is contained in:
Looly 2023-06-16 17:19:08 +08:00
parent 8f784a196a
commit ea713a13d0
5 changed files with 107 additions and 2 deletions

View File

@ -63,7 +63,7 @@ public class CopyOptions implements Serializable {
private BiPredicate<Field, Object> propertiesFilter; private BiPredicate<Field, Object> propertiesFilter;
/** /**
* 字段属性名和属性值编辑器用于自定义属性转换规则例如驼峰转下划线等自定义属性值转换规则例如null转"" * 字段属性名和属性值编辑器用于自定义属性转换规则例如驼峰转下划线等自定义属性值转换规则例如null转""
*/ */
protected UnaryOperator<MutableEntry<String, Object>> fieldEditor; protected UnaryOperator<MutableEntry<String, Object>> fieldEditor;
@ -338,6 +338,7 @@ public class CopyOptions implements Serializable {
* @param value * @param value
* @return 是否保留 * @return 是否保留
*/ */
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
protected boolean testPropertyFilter(final Field field, final Object value) { protected boolean testPropertyFilter(final Field field, final Object value) {
return null == this.propertiesFilter || this.propertiesFilter.test(field, value); return null == this.propertiesFilter || this.propertiesFilter.test(field, value);
} }

View File

@ -23,6 +23,7 @@ import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.map.MapProxy; import org.dromara.hutool.core.map.MapProxy;
import org.dromara.hutool.core.reflect.ConstructorUtil; import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.reflect.TypeUtil; import org.dromara.hutool.core.reflect.TypeUtil;
import org.dromara.hutool.core.text.StrUtil;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@ -97,6 +98,9 @@ public class BeanConverter implements Converter, Serializable {
} else if (value instanceof byte[]) { } else if (value instanceof byte[]) {
// 尝试反序列化 // 尝试反序列化
return SerializeUtil.deserialize((byte[]) value); return SerializeUtil.deserialize((byte[]) value);
} else if(StrUtil.isEmptyIfStr(value)){
// issue#3136
return null;
} }
throw new ConvertException("Unsupported source type: [{}] to [{}]", value.getClass(), targetType); throw new ConvertException("Unsupported source type: [{}] to [{}]", value.getClass(), targetType);

View File

@ -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.IORuntimeException;
import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.lang.Assert; 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.BiMap;
import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
@ -988,7 +989,8 @@ public class XmlUtil {
} }
/** /**
* XML转Java Bean * XML转Java Bean<br>
* 如果XML根节点只有一个且节点名和Bean的名称一致则直接转换子节点
* *
* @param <T> bean类型 * @param <T> bean类型
* @param node XML节点 * @param node XML节点

View File

@ -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 = "<?xml version=\"1.0\" encoding=\"gbk\" ?><response><code>02</code><message></message></response>";
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<MessageItem> item = new ArrayList<>();
}
@Data
static class MessageItem {
/**
* 手机号.
*/
private String desmobile;
/**
* 消息id.
*/
private String msgid;
}
}

View File

@ -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"));
}
}