diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/CompositeConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/CompositeConverter.java index e95d3251e..cc33061a9 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/CompositeConverter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/CompositeConverter.java @@ -231,6 +231,11 @@ public class CompositeConverter extends RegisterConverter { return (T) KBeanConverter.INSTANCE.convert(type, value); } + // issue#I7FQ29 Class + if("java.lang.Class".equals(rowType.getName())){ + return (T) ClassConverter.INSTANCE.convert(type, value); + } + // 表示非需要特殊转换的对象 return null; } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java index 1fd0a8cf3..26bb55a97 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/RegisterConverter.java @@ -12,33 +12,7 @@ package org.dromara.hutool.core.convert; -import org.dromara.hutool.core.convert.impl.AtomicBooleanConverter; -import org.dromara.hutool.core.convert.impl.AtomicIntegerArrayConverter; -import org.dromara.hutool.core.convert.impl.AtomicLongArrayConverter; -import org.dromara.hutool.core.convert.impl.AtomicReferenceConverter; -import org.dromara.hutool.core.convert.impl.BooleanConverter; -import org.dromara.hutool.core.convert.impl.CalendarConverter; -import org.dromara.hutool.core.convert.impl.CharacterConverter; -import org.dromara.hutool.core.convert.impl.CharsetConverter; -import org.dromara.hutool.core.convert.impl.ClassConverter; -import org.dromara.hutool.core.convert.impl.CurrencyConverter; -import org.dromara.hutool.core.convert.impl.DateConverter; -import org.dromara.hutool.core.convert.impl.DurationConverter; -import org.dromara.hutool.core.convert.impl.LocaleConverter; -import org.dromara.hutool.core.convert.impl.OptConverter; -import org.dromara.hutool.core.convert.impl.OptionalConverter; -import org.dromara.hutool.core.convert.impl.PathConverter; -import org.dromara.hutool.core.convert.impl.PeriodConverter; -import org.dromara.hutool.core.convert.impl.ReferenceConverter; -import org.dromara.hutool.core.convert.impl.StackTraceElementConverter; -import org.dromara.hutool.core.convert.impl.StringConverter; -import org.dromara.hutool.core.convert.impl.TemporalAccessorConverter; -import org.dromara.hutool.core.convert.impl.TimeZoneConverter; -import org.dromara.hutool.core.convert.impl.URIConverter; -import org.dromara.hutool.core.convert.impl.URLConverter; -import org.dromara.hutool.core.convert.impl.UUIDConverter; -import org.dromara.hutool.core.convert.impl.XMLGregorianCalendarConverter; -import org.dromara.hutool.core.convert.impl.ZoneIdConverter; +import org.dromara.hutool.core.convert.impl.*; import org.dromara.hutool.core.date.DateTime; import org.dromara.hutool.core.lang.Opt; import org.dromara.hutool.core.map.SafeConcurrentHashMap; @@ -52,27 +26,9 @@ import java.net.URI; import java.net.URL; import java.nio.charset.Charset; import java.nio.file.Path; -import java.time.DayOfWeek; -import java.time.Duration; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.Month; -import java.time.MonthDay; -import java.time.OffsetDateTime; -import java.time.OffsetTime; -import java.time.Period; -import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.time.*; import java.time.temporal.TemporalAccessor; -import java.util.Calendar; -import java.util.Currency; -import java.util.Locale; -import java.util.Map; -import java.util.Optional; -import java.util.TimeZone; -import java.util.UUID; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicIntegerArray; import java.util.concurrent.atomic.AtomicLongArray; @@ -248,7 +204,6 @@ public class RegisterConverter implements Converter, Serializable { defaultConverterMap.put(AtomicLongArray.class, new AtomicLongArrayConverter()); // 其它类型 - defaultConverterMap.put(Class.class, new ClassConverter()); defaultConverterMap.put(TimeZone.class, new TimeZoneConverter()); defaultConverterMap.put(ZoneId.class, new ZoneIdConverter()); defaultConverterMap.put(Locale.class, new LocaleConverter()); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/ClassConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/ClassConverter.java index 10c291315..abb417a84 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/ClassConverter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/ClassConverter.java @@ -24,6 +24,11 @@ import org.dromara.hutool.core.classloader.ClassLoaderUtil; public class ClassConverter extends AbstractConverter { private static final long serialVersionUID = 1L; + /** + * 单例 + */ + public static ClassConverter INSTANCE = new ClassConverter(); + private final boolean isInitialized; /** diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/IssueI7FQ29Test.java b/hutool-json/src/test/java/org/dromara/hutool/json/IssueI7FQ29Test.java new file mode 100755 index 000000000..8c92949fa --- /dev/null +++ b/hutool-json/src/test/java/org/dromara/hutool/json/IssueI7FQ29Test.java @@ -0,0 +1,35 @@ +/* + * 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 org.dromara.hutool.core.reflect.TypeReference; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +/** + * https://gitee.com/dromara/hutool/issues/I7FQ29 + */ +public class IssueI7FQ29Test { + + @Test + void toMapTest() { + final String jsonStr = "{\"trans_no\": \"java.lang.String\"}"; + final Map> map = JSONUtil.toBean(jsonStr, new TypeReference>>() { + }); + + Assertions.assertNotNull(map); + Assertions.assertEquals(String.class, map.get("trans_no")); + } +}