From 7dc1b9aeefe545080c59a6a373200d03128016ce Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 2 Oct 2022 20:05:06 +0800 Subject: [PATCH] remove old --- .../hutool/json/convert/JSONConverterOld.java | 194 ------------------ .../convert/JSONDeserializerConverter.java | 3 + 2 files changed, 3 insertions(+), 194 deletions(-) delete mode 100644 hutool-json/src/main/java/cn/hutool/json/convert/JSONConverterOld.java diff --git a/hutool-json/src/main/java/cn/hutool/json/convert/JSONConverterOld.java b/hutool-json/src/main/java/cn/hutool/json/convert/JSONConverterOld.java deleted file mode 100644 index 68c4a4d13..000000000 --- a/hutool-json/src/main/java/cn/hutool/json/convert/JSONConverterOld.java +++ /dev/null @@ -1,194 +0,0 @@ -package cn.hutool.json.convert; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.convert.ConvertException; -import cn.hutool.core.convert.Converter; -import cn.hutool.core.convert.CompositeConverter; -import cn.hutool.core.convert.impl.BeanConverter; -import cn.hutool.core.convert.impl.DateConverter; -import cn.hutool.core.convert.impl.TemporalAccessorConverter; -import cn.hutool.core.reflect.ConstructorUtil; -import cn.hutool.core.reflect.TypeUtil; -import cn.hutool.core.text.StrUtil; -import cn.hutool.core.util.ObjUtil; -import cn.hutool.json.InternalJSONUtil; -import cn.hutool.json.JSON; -import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONConfig; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; -import cn.hutool.json.serialize.GlobalSerializeMapping; -import cn.hutool.json.serialize.JSONDeserializer; - -import java.lang.reflect.Type; -import java.time.temporal.TemporalAccessor; -import java.util.Date; - -/** - * JSON转换器 - * - * @author looly - * @since 4.2.2 - */ -public class JSONConverterOld implements Converter { - - public static final JSONConverterOld INSTANCE = new JSONConverterOld(); - - private static final CompositeConverter registry; - static { - // 注册到转换中心 - registry = new CompositeConverter(); - registry.putCustom(JSON.class, INSTANCE); - registry.putCustom(JSONObject.class, INSTANCE); - registry.putCustom(JSONArray.class, INSTANCE); - } - - @Override - public Object convert(final Type targetType, final Object value) throws ConvertException { - return JSONUtil.parse(value); - } - - /** - * 转换值为指定类型,可选是否不抛异常转换
- * 当转换失败时返回默认值 - * - * @param 目标类型 - * @param type 目标类型 - * @param value 值 - * @param defaultValue 默认值 - * @param quietly 是否静默转换,true不抛异常 - * @return 转换后的值 - * @since 5.3.2 - */ - public static T convertWithCheck(final Type type, final Object value, final T defaultValue, final boolean quietly) { - try { - return registry.convert(type, value, defaultValue); - } catch (final Exception e) { - if(quietly){ - return defaultValue; - } - throw e; - } - } - - /** - * JSON递归转换
- * 首先尝试JDK类型转换,如果失败尝试JSON转Bean
- * 如果遇到{@link JSONDeserializer},则调用其{@link JSONDeserializer#deserialize(JSON)}方法转换。 - * - * @param 转换后的对象类型 - * @param targetType 目标类型 - * @param value 值 - * @param config JSON配置项 - * @return 目标类型的值 - * @throws ConvertException 转换失败 - */ - @SuppressWarnings("unchecked") - public static T jsonConvert(final Type targetType, final Object value, final JSONConfig config) throws ConvertException { - if (null == value) { - return null; - } - - // since 5.7.8,增加自定义Bean反序列化接口和特殊对象的自定义转换 - if (targetType instanceof Class) { - final Class targetClass = (Class) targetType; - if (targetClass.isInstance(value)) { - return (T) value; - } else if (JSONDeserializer.class.isAssignableFrom(targetClass)) { - // 自定义反序列化 - if (value instanceof JSON) { - final JSONDeserializer target = (JSONDeserializer) ConstructorUtil.newInstanceIfPossible(targetClass); - if (null == target) { - throw new ConvertException("Can not instance target: [{}]", targetType); - } - return target.deserialize((JSON) value); - } - } else if (targetClass.isAssignableFrom(Date.class) || targetClass.isAssignableFrom(TemporalAccessor.class)) { - // 用户指定了日期格式,获取日期属性时使用对应格式 - final String valueStr = convertWithCheck(String.class, value, null, true); - if (null == valueStr) { - return null; - } - - // 日期转换,支持自定义日期格式 - final String format = getDateFormat(config); - if (null != format) { - if (targetClass.isAssignableFrom(Date.class)) { - return (T) new DateConverter(format).convert(targetClass, valueStr); - } else { - return (T) new TemporalAccessorConverter(format).convert(targetClass, valueStr); - } - } - } - } - - return jsonToBean(targetType, value, null != config && config.isIgnoreError()); - } - - /** - * JSON递归转换为Bean
- * 首先尝试JDK类型转换,如果失败尝试JSON转Bean - * - * @param 转换后的对象类型 - * @param targetType 目标类型 - * @param value 值,JSON格式 - * @param ignoreError 是否忽略转换错误 - * @return 目标类型的值 - * @throws ConvertException 转换失败 - * @since 5.7.10 - */ - @SuppressWarnings("unchecked") - public static T jsonToBean(final Type targetType, final Object value, final boolean ignoreError) throws ConvertException { - if (null == value) { - return null; - } - - if (value instanceof JSON) { - final JSON valueJson = (JSON) value; - // 全局自定义反序列化 - final JSONDeserializer deserializer = GlobalSerializeMapping.getDeserializer(targetType); - if (null != deserializer) { - return (T) deserializer.deserialize(valueJson); - } - - // issue#2212@Github - // 在JSONObject转Bean时,读取JSONObject本身的配置文件 - if (targetType instanceof Class && BeanUtil.hasSetter((Class) targetType)) { - final JSONConfig config = valueJson.getConfig(); - final Converter converter = new BeanConverter(InternalJSONUtil.toCopyOptions(config).setIgnoreError(ignoreError)); - return ignoreError ? converter.convert(targetType, value, null) - : (T) converter.convert(targetType, value); - } - } - - final T targetValue = convertWithCheck(targetType, value, null, ignoreError); - - if (null == targetValue && false == ignoreError) { - if (StrUtil.isBlankIfStr(value)) { - // 对于传入空字符串的情况,如果转换的目标对象是非字符串或非原始类型,转换器会返回false。 - // 此处特殊处理,认为返回null属于正常情况 - return null; - } - - throw new ConvertException("Can not convert {} to type {}", value, ObjUtil.defaultIfNull(TypeUtil.getClass(targetType), targetType)); - } - - return targetValue; - } - - /** - * 获取配置文件中的日期格式,无格式返回{@code null} - * - * @param config JSON配置 - * @return 日期格式,无返回{@code null} - */ - private static String getDateFormat(final JSONConfig config) { - if (null != config) { - final String format = config.getDateFormat(); - if (StrUtil.isNotBlank(format)) { - return format; - } - } - return null; - } -} diff --git a/hutool-json/src/main/java/cn/hutool/json/convert/JSONDeserializerConverter.java b/hutool-json/src/main/java/cn/hutool/json/convert/JSONDeserializerConverter.java index cd7c92d35..9265a100a 100644 --- a/hutool-json/src/main/java/cn/hutool/json/convert/JSONDeserializerConverter.java +++ b/hutool-json/src/main/java/cn/hutool/json/convert/JSONDeserializerConverter.java @@ -15,6 +15,9 @@ import cn.hutool.json.serialize.JSONDeserializer; public class JSONDeserializerConverter extends AbstractConverter { private static final long serialVersionUID = 1L; + /** + * 单例 + */ public static final JSONDeserializerConverter INSTANCE = new JSONDeserializerConverter(); @Override