diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java index d9cda806f..8f3ebb68c 100755 --- a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java @@ -153,7 +153,8 @@ public class ConverterRegistry implements Serializable { */ @SuppressWarnings("unchecked") public Converter getDefaultConverter(Type type) { - return (null == defaultConverterMap) ? null : (Converter) defaultConverterMap.get(TypeUtil.getClass(type)); + Class key = TypeUtil.getClass(type); + return (null == defaultConverterMap || null == key) ? null : (Converter) defaultConverterMap.get(key); } /** diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java index 80d56f111..baf0e65f6 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java @@ -796,6 +796,11 @@ public class JSONUtil { return object.toString(); } + // Class类型保存类名 + if (object instanceof Class) { + return ((Class) object).getName(); + } + // Java内部类不做转换 if (ClassUtil.isJdkClass(object.getClass())) { return object.toString(); diff --git a/hutool-json/src/test/java/cn/hutool/json/Issue3504Test.java b/hutool-json/src/test/java/cn/hutool/json/Issue3504Test.java new file mode 100644 index 000000000..577dbe6da --- /dev/null +++ b/hutool-json/src/test/java/cn/hutool/json/Issue3504Test.java @@ -0,0 +1,26 @@ +package cn.hutool.json; + +import lombok.Data; +import org.junit.Test; + +/** + * https://github.com/dromara/hutool/issues/3504 + */ +public class Issue3504Test { + + @Test + public void test3504() { + JsonBean jsonBean = new JsonBean(); + jsonBean.setName("test"); + jsonBean.setClasses(new Class[]{String.class}); + String huToolJsonStr = JSONUtil.toJsonStr(jsonBean); + System.out.println("hutool json str-------" + huToolJsonStr); + System.out.println(JSONUtil.toBean(huToolJsonStr, JsonBean.class)); + } + + @Data + public static class JsonBean { + private String name; + private Class[] classes; + } +} diff --git a/hutool-json/src/test/java/cn/hutool/json/Issue3506Test.java b/hutool-json/src/test/java/cn/hutool/json/Issue3506Test.java new file mode 100644 index 000000000..70f128d3c --- /dev/null +++ b/hutool-json/src/test/java/cn/hutool/json/Issue3506Test.java @@ -0,0 +1,30 @@ +package cn.hutool.json; + +import lombok.Data; +import org.junit.Test; + +/** + * https://github.com/dromara/hutool/issues/3506 + */ +public class Issue3506Test { + + @Test + public void test3506() { + Languages languages = new Languages(); + languages.setLanguageType(Java.class); + String hutoolJSONString = JSONUtil.toJsonStr(languages); + System.out.println(hutoolJSONString); + System.out.println(JSONUtil.toBean(hutoolJSONString, Languages.class)); + } + + @Data + public static class Languages { + private Class languageType; + } + + public interface Language { + } + + public static class Java implements Language { + } +}