mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
fix code
This commit is contained in:
parent
bd97a73cb9
commit
a6f01e75c6
@ -22,6 +22,7 @@ import org.dromara.hutool.core.reflect.TypeUtil;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -80,7 +81,8 @@ public class MapConverter implements Converter, Serializable {
|
||||
return (Map) value;
|
||||
}
|
||||
}
|
||||
map = MapUtil.createMap(TypeUtil.getClass(targetType));
|
||||
|
||||
map = MapUtil.createMap(TypeUtil.getClass(targetType), LinkedHashMap::new);
|
||||
convertMapToMap(keyType, valueType, (Map) value, map);
|
||||
} else if (BeanUtil.isBean(value.getClass())) {
|
||||
map = BeanUtil.beanToMap(value);
|
||||
|
@ -24,10 +24,7 @@ import org.dromara.hutool.core.util.ObjUtil;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.UnaryOperator;
|
||||
import java.util.function.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -240,16 +237,30 @@ public class MapUtil extends MapGetUtil {
|
||||
* @param mapType map类型
|
||||
* @return {@link Map}实例
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <K, V> Map<K, V> createMap(final Class<?> mapType) {
|
||||
return createMap(mapType, HashMap::new);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建Map<br>
|
||||
* 传入抽象Map{@link AbstractMap}和{@link Map}类将默认创建{@link HashMap}
|
||||
*
|
||||
* @param <K> map键类型
|
||||
* @param <V> map值类型
|
||||
* @param mapType map类型
|
||||
* @param defaultMap 如果通过反射创建失败或提供的是抽象Map,则创建的默认Map
|
||||
* @return {@link Map}实例
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <K, V> Map<K, V> createMap(final Class<?> mapType, final Supplier<Map<K, V>> defaultMap) {
|
||||
if (null == mapType || mapType.isAssignableFrom(AbstractMap.class)) {
|
||||
return new HashMap<>();
|
||||
return defaultMap.get();
|
||||
} else {
|
||||
try {
|
||||
return (Map<K, V>) ConstructorUtil.newInstance(mapType);
|
||||
} catch (final Exception e) {
|
||||
// 不支持的map类型,返回默认的HashMap
|
||||
return new HashMap<>();
|
||||
return defaultMap.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
45
hutool-core/src/test/java/org/dromara/hutool/core/data/Issue3081Test.java
Executable file
45
hutool-core/src/test/java/org/dromara/hutool/core/data/Issue3081Test.java
Executable file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* 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.data;
|
||||
|
||||
import org.dromara.hutool.core.date.DateField;
|
||||
import org.dromara.hutool.core.date.DateRange;
|
||||
import org.dromara.hutool.core.date.DateTime;
|
||||
import org.dromara.hutool.core.date.DateUtil;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Issue3081Test {
|
||||
|
||||
@Test
|
||||
void dateRangeTest() {
|
||||
final DateTime start = DateUtil.parse("2023-01-01 00:00:00");
|
||||
final DateTime end = DateUtil.parse("2023-04-25 00:00:00");
|
||||
|
||||
final DateRange dateTimes = new DateRange(start, end, DateField.DAY_OF_MONTH, 30, true, true);
|
||||
|
||||
final List<DateTime> dateTimeList = new ArrayList<>();
|
||||
while (dateTimes.hasNext()) {
|
||||
dateTimeList.add(dateTimes.next());
|
||||
}
|
||||
Assertions.assertEquals(4, dateTimeList.size());
|
||||
|
||||
Assertions.assertEquals(DateUtil.parse("2023-01-01 00:00:00"), dateTimeList.get(0));
|
||||
Assertions.assertEquals(DateUtil.parse("2023-01-31 00:00:00"), dateTimeList.get(1));
|
||||
Assertions.assertEquals(DateUtil.parse("2023-03-02 00:00:00"), dateTimeList.get(2));
|
||||
Assertions.assertEquals(DateUtil.parse("2023-04-01 00:00:00"), dateTimeList.get(3));
|
||||
}
|
||||
}
|
@ -33,7 +33,7 @@ public class ClientEngineFactory {
|
||||
* @return 单例的ClientEngine
|
||||
*/
|
||||
public static ClientEngine getEngine() {
|
||||
return Singleton.get(ClientEngine.class.getName(), ClientEngineFactory::getEngine);
|
||||
return Singleton.get(ClientEngine.class.getName(), ClientEngineFactory::createEngine);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -186,7 +186,15 @@ public class HtmlUtil {
|
||||
// [^>]+? 属性值,至少有一个非>的字符,>表示标签结束
|
||||
// \s+(?=>) 表示属性值后跟空格加>,即末尾的属性,此时去掉空格
|
||||
// (?=\s|>) 表示属性值后跟空格(属性后还有别的属性)或者跟>(最后一个属性)
|
||||
regex = StrUtil.format("(?i)(\\s*{}\\s*=[^>]+?\\s+(?=>))|(\\s*{}\\s*=[^>]+?(?=\\s|>))", attr, attr);
|
||||
regex = StrUtil.format("(?i)(\\s*{}\\s*=\\s*)" +
|
||||
"(" +
|
||||
// name="xxxx"
|
||||
"([\"][^\"]+?[\"]\\s*)|" +
|
||||
// name=xxx >
|
||||
"([^>]+?\\s+(?=>))|" +
|
||||
// name=xxx> 或者 name=xxx name2=xxx
|
||||
"([^>]+?(?=\\s|>))" +
|
||||
")", attr);
|
||||
content = content.replaceAll(regex, StrUtil.EMPTY);
|
||||
}
|
||||
return content;
|
||||
|
@ -199,4 +199,15 @@ public class HtmlUtilTest {
|
||||
charsetName = ReUtil.get(HtmlUtil.META_CHARSET_PATTERN, "<meta charset = \"utf-8\"", 1);
|
||||
Assertions.assertEquals("utf-8", charsetName);
|
||||
}
|
||||
|
||||
@Test
|
||||
void issueI6YNTFTest() {
|
||||
String html = "<html><body><div class=\"a1 a2\">hello world</div></body></html>";
|
||||
String cleanText = HtmlUtil.removeHtmlAttr(html,"class");
|
||||
Assertions.assertEquals("<html><body><div>hello world</div></body></html>", cleanText);
|
||||
|
||||
html = "<html><body><div class=a1>hello world</div></body></html>";
|
||||
cleanText = HtmlUtil.removeHtmlAttr(html,"class");
|
||||
Assertions.assertEquals("<html><body><div>hello world</div></body></html>", cleanText);
|
||||
}
|
||||
}
|
||||
|
46
hutool-json/src/test/java/org/dromara/hutool/json/IssueI6YN2ATest.java
Executable file
46
hutool-json/src/test/java/org/dromara/hutool/json/IssueI6YN2ATest.java
Executable file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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.json;
|
||||
|
||||
import lombok.Data;
|
||||
import org.dromara.hutool.core.reflect.TypeReference;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class IssueI6YN2ATest {
|
||||
|
||||
@Test
|
||||
public void toBeanTest() {
|
||||
final String str = "{\"conditions\":{\"user\":\"test\",\"sex\":\"男\"}," +
|
||||
"\"headers\":{\"name\":\"姓名\",\"age\":\"年龄\",\"email\":\"邮箱\",\"number\":\"号码\",\"pwd\":\"密码\"}}";
|
||||
final JSONObject jsonObject = JSONUtil.parseObj(str);
|
||||
|
||||
final PageQuery<User> bean = jsonObject.toBean(new TypeReference<PageQuery<User>>() {});
|
||||
Assertions.assertEquals("{name=姓名, age=年龄, email=邮箱, number=号码, pwd=密码}", bean.headers.toString());
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class PageQuery<T> {
|
||||
private Map<String, String> headers = new LinkedHashMap<>();
|
||||
private T conditions;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class User {
|
||||
private String name;
|
||||
private String sex;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user