From 92d1843fbd810e612956479e393fcda50a30462e Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 5 Sep 2022 00:09:48 +0800 Subject: [PATCH] fix code --- .../java/cn/hutool/json/InternalJSONUtil.java | 4 +--- .../src/main/java/cn/hutool/json/JSON.java | 7 +++--- .../main/java/cn/hutool/json/JSONConfig.java | 22 ++++++++++++++++++- .../main/java/cn/hutool/json/JSONGetter.java | 4 ++-- .../json/convert/JSONCompositeConverter.java | 16 ++++++++++++++ 5 files changed, 44 insertions(+), 9 deletions(-) create mode 100755 hutool-json/src/main/java/cn/hutool/json/convert/JSONCompositeConverter.java diff --git a/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java b/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java index 29e71776d..b247e08df 100755 --- a/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java +++ b/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java @@ -13,7 +13,6 @@ import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.ObjUtil; -import cn.hutool.json.convert.JSONConverterOld; import cn.hutool.json.serialize.JSONString; import java.io.IOException; @@ -257,8 +256,7 @@ public final class InternalJSONUtil { .setIgnoreNullValue(config.isIgnoreNullValue()) .setTransientSupport(config.isTransientSupport()) // 使用JSON转换器 - .setConverter((type, value) -> - JSONConverterOld.convertWithCheck(type, value, null, config.isIgnoreError())); + .setConverter(config.getConverter()); } /** diff --git a/hutool-json/src/main/java/cn/hutool/json/JSON.java b/hutool-json/src/main/java/cn/hutool/json/JSON.java index dc282d680..c0c1f3a7c 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSON.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSON.java @@ -2,7 +2,6 @@ package cn.hutool.json; import cn.hutool.core.bean.BeanPath; import cn.hutool.core.lang.mutable.MutableEntry; -import cn.hutool.json.convert.JSONConverterOld; import java.io.Serializable; import java.io.StringWriter; @@ -107,8 +106,9 @@ public interface JSON extends Cloneable, Serializable { * @see BeanPath#get(Object) * @since 4.0.6 */ + @SuppressWarnings("unchecked") default T getByPath(final String expression, final Class resultType){ - return JSONConverterOld.jsonConvert(resultType, getByPath(expression), getConfig()); + return (T) getConfig().getConverter().convert(resultType, getByPath(expression)); } /** @@ -169,7 +169,8 @@ public interface JSON extends Cloneable, Serializable { * @return 实体类对象 * @since 4.3.2 */ + @SuppressWarnings("unchecked") default T toBean(final Type type) { - return JSONConverterOld.jsonConvert(type, this, getConfig()); + return (T) getConfig().getConverter().convert(type, this); } } diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java b/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java index b90a512c3..2e2526b82 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java @@ -1,6 +1,7 @@ package cn.hutool.json; import cn.hutool.core.comparator.CompareUtil; +import cn.hutool.core.convert.Converter; import java.io.Serializable; import java.util.Comparator; @@ -38,7 +39,6 @@ public class JSONConfig implements Serializable { * 是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。 */ private boolean transientSupport = true; - /** * 是否去除末尾多余0,例如如果为true,5.0返回5 */ @@ -47,6 +47,10 @@ public class JSONConfig implements Serializable { * 是否检查重复key */ private boolean checkDuplicate; + /** + * 自定义的类型转换器,用于在序列化、反序列化操作中实现对象类型转换 + */ + private Converter converter; /** * 创建默认的配置项 @@ -237,4 +241,20 @@ public class JSONConfig implements Serializable { this.checkDuplicate = checkDuplicate; return this; } + + /** + * 获取自定义的类型转换器,用于在序列化、反序列化操作中实现对象类型转换 + * @return 转换器 + */ + public Converter getConverter() { + return converter; + } + + /** + * 设置自定义的类型转换器,用于在序列化、反序列化操作中实现对象类型转换 + * @param converter 转换器 + */ + public void setConverter(final Converter converter) { + this.converter = converter; + } } diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java b/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java index 6114a2790..15b586f21 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java @@ -3,7 +3,6 @@ package cn.hutool.json; import cn.hutool.core.convert.ConvertException; import cn.hutool.core.lang.getter.OptNullBasicTypeFromObjectGetter; import cn.hutool.core.util.ObjUtil; -import cn.hutool.json.convert.JSONConverterOld; import java.time.LocalDateTime; import java.util.Date; @@ -163,12 +162,13 @@ public interface JSONGetter extends OptNullBasicTypeFromObjectGetter { * @throws ConvertException 转换异常 * @since 3.0.8 */ + @SuppressWarnings("unchecked") default T get(final K key, final Class type) throws ConvertException { final Object value = this.getObj(key); if (ObjUtil.isNull(value)) { return null; } - return JSONConverterOld.jsonConvert(type, value, getConfig()); + return (T) getConfig().getConverter().convert(type, value); } } diff --git a/hutool-json/src/main/java/cn/hutool/json/convert/JSONCompositeConverter.java b/hutool-json/src/main/java/cn/hutool/json/convert/JSONCompositeConverter.java new file mode 100755 index 000000000..709899b03 --- /dev/null +++ b/hutool-json/src/main/java/cn/hutool/json/convert/JSONCompositeConverter.java @@ -0,0 +1,16 @@ +package cn.hutool.json.convert; + +import cn.hutool.core.convert.CompositeConverter; +import cn.hutool.core.convert.ConvertException; + +import java.lang.reflect.Type; + +public class JSONCompositeConverter extends CompositeConverter { + + public static final JSONCompositeConverter INSTANCE = new JSONCompositeConverter(); + + @Override + public T convert(final Type type, final Object value, final T defaultValue, final boolean isCustomFirst) throws ConvertException { + return super.convert(type, value, defaultValue, isCustomFirst); + } +}