From 055788dfe07468b1d06fff3e62a51f033ccc45e8 Mon Sep 17 00:00:00 2001 From: limliu <261010267@qq.com> Date: Sun, 14 May 2023 16:02:05 +0800 Subject: [PATCH] =?UTF-8?q?Spring=20RestController=20=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BAmap=E6=97=B6?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=94=99=E8=AF=AF,=20long=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=9A=E4=BA=86=E4=B8=80=E5=B1=82=E5=8F=8C=E5=BC=95?= =?UTF-8?q?=E5=8F=B7=20#4388?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fastjson/serializer/MapSerializer.java | 29 +++++++----- .../com/alibaba/fastjson/util/TypeUtils.java | 45 ++++++++++++++++--- 2 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java b/src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java index ef6d73d7a1..3059749e64 100644 --- a/src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java +++ b/src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java @@ -15,13 +15,18 @@ */ package com.alibaba.fastjson.serializer; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.util.TypeUtils; import java.io.IOException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.*; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; /** * @author wenshao[szujobs@hotmail.com] @@ -118,7 +123,7 @@ public void write(JSONSerializer serializer continue; } } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); + String strKey = TypeUtils.cast(entryKey, String.class); if (!this.applyName(serializer, object, strKey)) { continue; } @@ -133,7 +138,7 @@ public void write(JSONSerializer serializer continue; } } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); + String strKey = TypeUtils.cast(entryKey, String.class); if (!this.applyName(serializer, object, strKey)) { continue; } @@ -149,7 +154,7 @@ public void write(JSONSerializer serializer continue; } } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); + String strKey = TypeUtils.cast(entryKey, String.class); if (!this.apply(serializer, object, strKey, value)) { continue; } @@ -164,7 +169,7 @@ public void write(JSONSerializer serializer continue; } } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); + String strKey = TypeUtils.cast(entryKey, String.class); if (!this.apply(serializer, object, strKey, value)) { continue; } @@ -178,7 +183,7 @@ public void write(JSONSerializer serializer if (entryKey == null || entryKey instanceof String) { entryKey = this.processKey(serializer, object, (String) entryKey, value); } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); + String strKey = TypeUtils.cast(entryKey, String.class); entryKey = this.processKey(serializer, object, strKey, value); } } @@ -189,7 +194,7 @@ public void write(JSONSerializer serializer if (entryKey == null || entryKey instanceof String) { entryKey = this.processKey(serializer, object, (String) entryKey, value); } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); + String strKey = TypeUtils.cast(entryKey, String.class); entryKey = this.processKey(serializer, object, strKey, value); } } @@ -201,7 +206,7 @@ public void write(JSONSerializer serializer } else { boolean objectOrArray = entryKey instanceof Map || entryKey instanceof Collection; if (!objectOrArray) { - String strKey = JSON.toJSONString(entryKey); + String strKey = TypeUtils.cast(entryKey, String.class); value = this.processValue(serializer, null, object, strKey, value, features); } } @@ -231,7 +236,7 @@ public void write(JSONSerializer serializer if ((out.isEnabled(NON_STRINGKEY_AS_STRING) || SerializerFeature.isEnabled(features, SerializerFeature.WriteNonStringKeyAsString)) && !(entryKey instanceof Enum)) { - String strEntryKey = JSON.toJSONString(entryKey); + String strEntryKey = TypeUtils.cast(entryKey, String.class); serializer.write(strEntryKey); } else { serializer.write(entryKey); diff --git a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java index 0fb8964193..cd47410b90 100644 --- a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java +++ b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java @@ -31,18 +31,47 @@ import com.alibaba.fastjson.serializer.CalendarCodec; import com.alibaba.fastjson.serializer.SerializeBeanInfo; import com.alibaba.fastjson.serializer.SerializerFeature; - import java.io.InputStream; import java.io.Reader; import java.lang.annotation.Annotation; -import java.lang.reflect.*; +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Proxy; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.lang.reflect.WildcardType; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Clob; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.Callable; +import java.util.AbstractCollection; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.regex.Matcher; @@ -1086,6 +1115,10 @@ public Object apply(Object obj, Class clazz) { } }; + public static T cast(final Object obj, final Class clazz) { + return cast(obj, clazz, null); + } + @SuppressWarnings({"unchecked", "rawtypes"}) public static T cast(final Object obj, final Class clazz, ParserConfig config) { if (obj == null) { @@ -1313,7 +1346,9 @@ public static T castToEnum(Object obj, Class clazz, ParserConfig mapping) } throw new JSONException("can not cast to : " + clazz.getName()); } - + public static T cast(Object obj, Type type){ + return cast(obj, type, null); + } @SuppressWarnings("unchecked") public static T cast(Object obj, Type type, ParserConfig mapping) { if (obj == null) {