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 a3b7b94e1..77694dcc4 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 @@ -123,7 +123,8 @@ public class RegisterConverter implements Converter, Serializable { * @return 转换器 */ public Converter getDefaultConverter(final Type type) { - return (null == defaultConverterMap) ? null : defaultConverterMap.get(TypeUtil.getClass(type)); + final Class key = null == type ? null : TypeUtil.getClass(type); + return (null == defaultConverterMap || null == key) ? null : defaultConverterMap.get(key); } /** diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java b/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java index 981cbf407..d408d1f8f 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java @@ -171,6 +171,12 @@ public class JSONValueMapper { return new JSONObject(object, jsonConfig); } + // pr#3507 + // Class类型保存类名 + if (object instanceof Class) { + return ((Class) object).getName(); + } + // 枚举类保存其字符串形式(4.0.2新增) if (object instanceof Enum // Java内部类不做转换 diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/Issue3504Test.java b/hutool-json/src/test/java/org/dromara/hutool/json/Issue3504Test.java new file mode 100644 index 000000000..17bd0ac1f --- /dev/null +++ b/hutool-json/src/test/java/org/dromara/hutool/json/Issue3504Test.java @@ -0,0 +1,24 @@ +package org.dromara.hutool.json; + +import lombok.Data; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class Issue3504Test { + @Test + public void test3504() { + final JsonBean jsonBean = new JsonBean(); + jsonBean.setName("test"); + jsonBean.setClasses(new Class[]{String.class}); + final String huToolJsonStr = JSONUtil.toJsonStr(jsonBean); + final JsonBean bean = JSONUtil.toBean(huToolJsonStr, JsonBean.class); + Assertions.assertNotNull(bean); + Assertions.assertEquals("test", bean.getName()); + } + + @Data + public static class JsonBean { + private String name; + private Class[] classes; + } +} diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/Issue3506Test.java b/hutool-json/src/test/java/org/dromara/hutool/json/Issue3506Test.java new file mode 100644 index 000000000..5c67a2cb0 --- /dev/null +++ b/hutool-json/src/test/java/org/dromara/hutool/json/Issue3506Test.java @@ -0,0 +1,30 @@ +package org.dromara.hutool.json; + +import lombok.Data; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class Issue3506Test { + + @Test + void toBeanTest() { + final Languages languages = new Languages(); + languages.setLanguageType(Java.class); + + final String hutoolJSONString = JSONUtil.toJsonStr(languages); + final Languages bean = JSONUtil.toBean(hutoolJSONString, Languages.class); + Assertions.assertNotNull(bean); + Assertions.assertEquals(bean.getLanguageType(), Java.class); + } + + @Data + public static class Languages { + private Class languageType; + } + + public interface Language { + } + + public static class Java implements Language { + } +}