From f2b347dc9dfb0c8d3cb0f811f612fe71db9c259c Mon Sep 17 00:00:00 2001 From: misakacoder <210086826@qq.com> Date: Tue, 5 Mar 2024 13:14:02 +0800 Subject: [PATCH 1/2] fix 3506 --- .../main/java/cn/hutool/json/JSONUtil.java | 5 ++++ .../java/cn/hutool/json/Issue3506Test.java | 30 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 hutool-json/src/test/java/cn/hutool/json/Issue3506Test.java 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/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 { + } +} From 745826012a97e2c2965d53fcc80dcd0b1976f0cb Mon Sep 17 00:00:00 2001 From: misakacoder <210086826@qq.com> Date: Tue, 5 Mar 2024 13:35:10 +0800 Subject: [PATCH 2/2] fix 3504 --- .../core/convert/ConverterRegistry.java | 3 ++- .../java/cn/hutool/json/Issue3504Test.java | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 hutool-json/src/test/java/cn/hutool/json/Issue3504Test.java 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/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; + } +}