This commit is contained in:
Looly 2022-06-23 00:54:52 +08:00
parent a8ca13d8d6
commit 245c76f4c7
8 changed files with 46 additions and 8 deletions

View File

@ -11,6 +11,7 @@ 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.JSONConverter;
import cn.hutool.json.serialize.JSONString;
import java.math.BigDecimal;

View File

@ -1,6 +1,7 @@
package cn.hutool.json;
import cn.hutool.core.bean.BeanPath;
import cn.hutool.json.convert.JSONConverter;
import java.io.Serializable;
import java.io.StringWriter;

View File

@ -8,6 +8,7 @@ import cn.hutool.core.lang.mutable.MutableEntry;
import cn.hutool.core.lang.mutable.MutableObj;
import cn.hutool.core.text.StrJoiner;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.json.convert.JSONConverter;
import cn.hutool.json.mapper.ArrayMapper;
import cn.hutool.json.serialize.JSONWriter;

View File

@ -3,6 +3,7 @@ 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.JSONConverter;
import java.time.LocalDateTime;
import java.util.Date;

View File

@ -5,6 +5,7 @@ import cn.hutool.core.lang.mutable.MutableEntry;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.map.MapWrapper;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.json.convert.JSONConverter;
import cn.hutool.json.mapper.ObjectMapper;
import cn.hutool.json.serialize.JSONWriter;

View File

@ -1,6 +1,7 @@
package cn.hutool.json;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.convert.JSONConverter;
import cn.hutool.json.serialize.JSONDeserializer;
import cn.hutool.json.serialize.JSONString;

View File

@ -1,7 +1,6 @@
package cn.hutool.json;
package cn.hutool.json.convert;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.convert.ConvertException;
import cn.hutool.core.convert.Converter;
import cn.hutool.core.convert.ConverterRegistry;
@ -12,6 +11,12 @@ 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;
@ -79,7 +84,7 @@ public class JSONConverter implements Converter {
* @throws ConvertException 转换失败
*/
@SuppressWarnings("unchecked")
protected static <T> T jsonConvert(final Type targetType, final Object value, final JSONConfig config) throws ConvertException {
public static <T> T jsonConvert(final Type targetType, final Object value, final JSONConfig config) throws ConvertException {
if (null == value) {
return null;
}
@ -98,10 +103,6 @@ public class JSONConverter implements Converter {
}
return target.deserialize((JSON) value);
}
} else if (targetClass == byte[].class && value instanceof CharSequence) {
// bytes二进制反序列化默认按照Base64对待
// issue#I59LW4
return (T) Base64.decode((CharSequence) value);
} else if (targetClass.isAssignableFrom(Date.class) || targetClass.isAssignableFrom(TemporalAccessor.class)) {
// 用户指定了日期格式获取日期属性时使用对应格式
final String valueStr = convertWithCheck(String.class, value, null, true);
@ -137,7 +138,7 @@ public class JSONConverter implements Converter {
* @since 5.7.10
*/
@SuppressWarnings("unchecked")
protected static <T> T jsonToBean(final Type targetType, final Object value, final boolean ignoreError) throws ConvertException {
public static <T> T jsonToBean(final Type targetType, final Object value, final boolean ignoreError) throws ConvertException {
if (null == value) {
return null;
}

View File

@ -0,0 +1,31 @@
package cn.hutool.json.convert;
import cn.hutool.core.convert.AbstractConverter;
import cn.hutool.core.convert.ConvertException;
import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.serialize.JSONDeserializer;
/**
* 实现了{@link JSONDeserializer}接口的Bean对象转换器用于将指定JSON转换为JSONDeserializer子对象
*
* @author looly
* @since 6.0.0
*/
public class JSONDeserializerConverter extends AbstractConverter {
private static final long serialVersionUID = 1L;
@Override
protected Object convertInternal(Class<?> targetClass, Object value) {
// 自定义反序列化
if (value instanceof JSON) {
final JSONDeserializer<?> target = (JSONDeserializer<?>) ConstructorUtil.newInstanceIfPossible(targetClass);
if (null == target) {
throw new ConvertException("Can not instance target: [{}]", targetClass);
}
return target.deserialize((JSON) value);
}
throw new ConvertException("JSONDeserializer bean must be convert from JSON!");
}
}