add ClassTypeAdapter

This commit is contained in:
Looly 2024-09-29 13:25:24 +08:00
parent 11824599eb
commit 5c163941fe
86 changed files with 374 additions and 38 deletions

View File

@ -37,13 +37,22 @@ import java.util.function.Predicate;
*/ */
public interface JSON extends Serializable { public interface JSON extends Serializable {
/**
* 获取JSON工厂
*
* @return JSON工厂
*/
JSONFactory getFactory();
/** /**
* 获取JSON配置 * 获取JSON配置
* *
* @return {@link JSONConfig} * @return {@link JSONConfig}
* @since 5.3.0 * @since 5.3.0
*/ */
JSONConfig config(); default JSONConfig config(){
return getFactory().getConfig();
}
/** /**
* JSON大小对于JSONObject是键值对的多少JSONArray则是元素的个数JSON原始数据为1 * JSON大小对于JSONObject是键值对的多少JSONArray则是元素的个数JSON原始数据为1
@ -250,6 +259,6 @@ public interface JSON extends Serializable {
* @return 实体类对象 * @return 实体类对象
*/ */
default <T> T toBean(final Type type) { default <T> T toBean(final Type type) {
return JSONFactory.of(config(), null).toBean(this, type); return getFactory().toBean(this, type);
} }
} }

View File

@ -103,8 +103,8 @@ public class JSONArray extends ListWrapper<JSON> implements JSON, JSONGetter<Int
// endregion // endregion
@Override @Override
public JSONConfig config() { public JSONFactory getFactory() {
return factory.getConfig(); return this.factory;
} }
@Override @Override

View File

@ -22,6 +22,9 @@ import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.json.reader.JSONParser; import org.dromara.hutool.json.reader.JSONParser;
import org.dromara.hutool.json.reader.JSONTokener; import org.dromara.hutool.json.reader.JSONTokener;
import org.dromara.hutool.json.serializer.JSONMapper; import org.dromara.hutool.json.serializer.JSONMapper;
import org.dromara.hutool.json.serializer.MatcherJSONDeserializer;
import org.dromara.hutool.json.serializer.MatcherJSONSerializer;
import org.dromara.hutool.json.serializer.TypeAdapter;
import org.dromara.hutool.json.support.JSONNodeBeanFactory; import org.dromara.hutool.json.support.JSONNodeBeanFactory;
import org.dromara.hutool.json.writer.JSONWriter; import org.dromara.hutool.json.writer.JSONWriter;
@ -54,6 +57,16 @@ public class JSONFactory {
return InstanceHolder.INSTANCE; return InstanceHolder.INSTANCE;
} }
/**
* 创建JSON工厂
*
* @param config JSON配置
* @return JSON工厂
*/
public static JSONFactory of(final JSONConfig config) {
return of(config, null);
}
/** /**
* 创建JSON工厂 * 创建JSON工厂
* *
@ -144,6 +157,31 @@ public class JSONFactory {
return this.mapper; return this.mapper;
} }
/**
* 注册自定义类型适配器用于自定义对象序列化和反序列化
*
* @param type 类型
* @param typeAdapter 自定义序列化器{@code null}表示移除
* @return this
*/
public JSONFactory register(final Type type, final TypeAdapter typeAdapter) {
getMapper().register(type, typeAdapter);
return this;
}
/**
* 注册自定义类型适配器用于自定义对象序列化和反序列化<br>
* 提供的适配器必须为实现{@link MatcherJSONSerializer}{@link MatcherJSONDeserializer}接口<br>
* 当两个接口都实现时同时注册序列化和反序列化器
*
* @param typeAdapter 自定义类型适配器
* @return this
*/
public JSONFactory register(final TypeAdapter typeAdapter) {
getMapper().register(typeAdapter);
return this;
}
// region ----- of // region ----- of
/** /**

View File

@ -31,12 +31,10 @@ import java.util.List;
public interface JSONGetter<K> extends TypeGetter<K> { public interface JSONGetter<K> extends TypeGetter<K> {
/** /**
* 获取JSON配置 * 获取JSON工厂
* * @return JSON工厂
* @return {@link JSONConfig}
* @since 5.3.0
*/ */
JSONConfig config(); JSONFactory getFactory();
/** /**
* key对应值是否为{@code null}或无此key * key对应值是否为{@code null}或无此key
@ -85,7 +83,7 @@ public interface JSONGetter<K> extends TypeGetter<K> {
} }
if (json instanceof JSONObject) { if (json instanceof JSONObject) {
return JSONUtil.parseArray(json, config()); return getFactory().parseArray(json);
} }
return json.asJSONArray(); return json.asJSONArray();

View File

@ -100,8 +100,8 @@ public class JSONObject extends MapWrapper<String, JSON> implements JSON, JSONGe
// endregion // endregion
@Override @Override
public JSONConfig config() { public JSONFactory getFactory() {
return this.factory.getConfig(); return this.factory;
} }
@Override @Override

View File

@ -119,9 +119,14 @@ public class JSONPrimitive implements Wrapper<Object>, JSON {
return this; return this;
} }
/**
* 获得JSON工厂类
*
* @return JSON工厂类
*/
@Override @Override
public JSONConfig config() { public JSONFactory getFactory() {
return this.factory.getConfig(); return this.factory;
} }
/** /**

View File

@ -22,6 +22,10 @@ import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.mutable.MutableEntry; import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.json.serializer.MatcherJSONDeserializer;
import org.dromara.hutool.json.serializer.MatcherJSONSerializer;
import org.dromara.hutool.json.serializer.TypeAdapter;
import org.dromara.hutool.json.serializer.TypeAdapterManager;
import org.dromara.hutool.json.support.JSONStrFormatter; import org.dromara.hutool.json.support.JSONStrFormatter;
import org.dromara.hutool.json.xml.JSONXMLUtil; import org.dromara.hutool.json.xml.JSONXMLUtil;
@ -404,7 +408,7 @@ public class JSONUtil {
* @return 实体类对象 * @return 实体类对象
* @since 4.3.2 * @since 4.3.2
*/ */
public static <T> T toBean(final Object obj, final JSONConfig config, Type type) { public static <T> T toBean(final Object obj, final JSONConfig config, final Type type) {
if (null == obj) { if (null == obj) {
return null; return null;
} }
@ -634,4 +638,27 @@ public class JSONUtil {
return StrUtil.isWrap(StrUtil.trim(str), '[', ']'); return StrUtil.isWrap(StrUtil.trim(str), '[', ']');
} }
// endregion // endregion
// region ----- registerTypeAdapter
/**
* 全局注册自定义类型适配器用于自定义对象序列化和反序列化
*
* @param type 类型
* @param typeAdapter 自定义序列化器{@code null}表示移除
*/
public void registerTypeAdapter(final Type type, final TypeAdapter typeAdapter) {
TypeAdapterManager.getInstance().register(type, typeAdapter);
}
/**
* 全局注册自定义类型适配器用于自定义对象序列化和反序列化<br>
* 提供的适配器必须为实现{@link MatcherJSONSerializer}{@link MatcherJSONDeserializer}接口<br>
* 当两个接口都实现时同时注册序列化和反序列化器
*
* @param typeAdapter 自定义类型适配器
*/
public void registerTypeAdapter(final TypeAdapter typeAdapter) {
TypeAdapterManager.getInstance().register(typeAdapter);
}
// endregion
} }

View File

@ -22,6 +22,7 @@ import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.json.*; import org.dromara.hutool.json.*;
import org.dromara.hutool.json.reader.JSONTokener; import org.dromara.hutool.json.reader.JSONTokener;
import org.dromara.hutool.json.serializer.impl.DefaultDeserializer;
import org.dromara.hutool.json.xml.JSONXMLParser; import org.dromara.hutool.json.xml.JSONXMLParser;
import org.dromara.hutool.json.xml.ParseConfig; import org.dromara.hutool.json.xml.ParseConfig;
@ -58,7 +59,7 @@ public class JSONMapper implements Serializable {
} }
private final JSONFactory factory; private final JSONFactory factory;
private TypeAdapterManager typeAdapterManager; private volatile TypeAdapterManager typeAdapterManager;
/** /**
* 构造 * 构造
@ -89,6 +90,31 @@ public class JSONMapper implements Serializable {
return this; return this;
} }
/**
* 注册自定义类型适配器用于自定义对象序列化和反序列化
*
* @param type 类型
* @param typeAdapter 自定义序列化器{@code null}表示移除
* @return this
*/
public JSONMapper register(final Type type, final TypeAdapter typeAdapter) {
initTypeAdapterManager().register(type, typeAdapter);
return this;
}
/**
* 注册自定义类型适配器用于自定义对象序列化和反序列化<br>
* 提供的适配器必须为实现{@link MatcherJSONSerializer}{@link MatcherJSONDeserializer}接口<br>
* 当两个接口都实现时同时注册序列化和反序列化器
*
* @param typeAdapter 自定义类型适配器
* @return this
*/
public JSONMapper register(final TypeAdapter typeAdapter) {
initTypeAdapterManager().register(typeAdapter);
return this;
}
/** /**
* 转为实体类对象 * 转为实体类对象
* *
@ -121,10 +147,7 @@ public class JSONMapper implements Serializable {
} }
final boolean ignoreError = ObjUtil.defaultIfNull(this.factory.getConfig(), JSONConfig::isIgnoreError, false); final boolean ignoreError = ObjUtil.defaultIfNull(this.factory.getConfig(), JSONConfig::isIgnoreError, false);
if (null == deserializer) { if (null == deserializer) {
if (ignoreError) { deserializer = DefaultDeserializer.INSTANCE;
return null;
}
throw new JSONException("No deserializer for type: " + type);
} }
try { try {
@ -314,4 +337,20 @@ public class JSONMapper implements Serializable {
private JSON mapFromTokener(final JSONTokener tokener) { private JSON mapFromTokener(final JSONTokener tokener) {
return this.factory.ofParser(tokener).parse(); return this.factory.ofParser(tokener).parse();
} }
/**
* 初始化类型转换器管理器如果尚未初始化则初始化否则直接返回
*
* @return {@link TypeAdapterManager}
*/
private TypeAdapterManager initTypeAdapterManager() {
if (null == this.typeAdapterManager) {
synchronized (this) {
if (null == this.typeAdapterManager) {
this.typeAdapterManager = TypeAdapterManager.of();
}
}
}
return this.typeAdapterManager;
}
} }

View File

@ -225,7 +225,8 @@ public class TypeAdapterManager {
} }
} }
return DefaultDeserializer.INSTANCE; // 此处返回null错误处理在mapper中
return null;
} }
// endregion // endregion

View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2024 Hutool Team and hutool.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.hutool.json.serializer.impl;
import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.json.JSON;
import org.dromara.hutool.json.serializer.JSONContext;
import org.dromara.hutool.json.serializer.JSONDeserializer;
import org.dromara.hutool.json.serializer.JSONSerializer;
import java.lang.reflect.Type;
/**
* Class类型适配器用于将Class对象序列化为字符串反序列化为Class对象<br>
* 注意考虑安全问题此类并不作为默认的适配器如需启用
* <pre>{@code
* final JSONFactory factory = JSONFactory.of(null, null);
* factory.register(Class<?>.class, ClassTypeAdapter.INSTANCE);
* }</pre>
*
* @author looly
* @since 6.0.0
*/
public class ClassTypeAdapter implements JSONSerializer<Class<?>>, JSONDeserializer<Class<?>> {
/**
* 单例
*/
public static final ClassTypeAdapter INSTANCE = new ClassTypeAdapter();
@Override
public JSON serialize(final Class<?> bean, final JSONContext context) {
return context.getOrCreatePrimitive(bean.getName());
}
@Override
public Class<?> deserialize(final JSON json, final Type deserializeType) {
return ClassUtil.forName((String) json.asJSONPrimitive().getValue(), true, null);
}
}

View File

@ -29,7 +29,7 @@ import java.util.List;
* @author looly * @author looly
* *
*/ */
public class ParseBeanTest { public class ParseBeanWithListTest {
@Test @Test
public void parseBeanTest() { public void parseBeanTest() {

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,10 +16,13 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data;
import org.dromara.hutool.core.bean.BeanUtil; import org.dromara.hutool.core.bean.BeanUtil;
import org.dromara.hutool.core.convert.ConvertUtil; import org.dromara.hutool.core.convert.ConvertUtil;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import lombok.Data; import org.dromara.hutool.json.JSONArray;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,9 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.io.resource.ResourceUtil; import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,10 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSON;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONPrimitive;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,10 +16,12 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.collection.ListUtil;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONArray;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;

View File

@ -17,6 +17,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSON;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.serializer.JSONContext; import org.dromara.hutool.json.serializer.JSONContext;
import org.dromara.hutool.json.serializer.JSONDeserializer; import org.dromara.hutool.json.serializer.JSONDeserializer;
import org.dromara.hutool.json.serializer.JSONSerializer; import org.dromara.hutool.json.serializer.JSONSerializer;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONObject;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.json.JSONException;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,8 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.collection.ListUtil; import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.json.JSON;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.serializer.JSONContext; import org.dromara.hutool.json.serializer.JSONContext;
import org.dromara.hutool.json.serializer.JSONSerializer; import org.dromara.hutool.json.serializer.JSONSerializer;
import org.dromara.hutool.json.serializer.TypeAdapterManager; import org.dromara.hutool.json.serializer.TypeAdapterManager;

View File

@ -18,6 +18,8 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.collection.ListUtil; import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.serializer.JSONDeserializer; import org.dromara.hutool.json.serializer.JSONDeserializer;
import org.dromara.hutool.json.serializer.TypeAdapterManager; import org.dromara.hutool.json.serializer.TypeAdapterManager;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,10 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import org.dromara.hutool.json.JSONArray;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONException;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -19,6 +19,8 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.reflect.ClassUtil; import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.json.JSONPrimitive;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.serializer.JSONContext; import org.dromara.hutool.json.serializer.JSONContext;
import org.dromara.hutool.json.serializer.JSONDeserializer; import org.dromara.hutool.json.serializer.JSONDeserializer;
import org.dromara.hutool.json.serializer.JSONSerializer; import org.dromara.hutool.json.serializer.JSONSerializer;

View File

@ -17,6 +17,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONFactory;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.serializer.impl.ClassTypeAdapter;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -24,21 +27,28 @@ public class Issue3506Test {
@Test @Test
void toBeanTest() { void toBeanTest() {
final JSONFactory factory = JSONFactory.of(null, null);
factory.register(Class.class, ClassTypeAdapter.INSTANCE);
final Languages languages = new Languages(); final Languages languages = new Languages();
languages.setLanguageType(Java.class); languages.setLanguageType(Java.class);
final String hutoolJSONString = JSONUtil.toJsonStr(languages); final String hutoolJSONString = factory.parseObj(languages).toString();
final Languages bean = JSONUtil.toBean(hutoolJSONString, Languages.class); Assertions.assertEquals("{\"languageType\":\"org.dromara.hutool.json.issues.Issue3506Test$Java\"}", hutoolJSONString);
final JSONObject jsonObject = factory.parseObj(hutoolJSONString);
final Languages bean = jsonObject.toBean(Languages.class);
Assertions.assertNotNull(bean); Assertions.assertNotNull(bean);
Assertions.assertEquals(bean.getLanguageType(), Java.class); Assertions.assertEquals(bean.getLanguageType(), Java.class);
} }
@Data @Data
public static class Languages { static class Languages {
private Class<? extends Language> languageType; private Class<? extends Language> languageType;
} }
public interface Language { interface Language {
} }
public static class Java implements Language { public static class Java implements Language {

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,7 @@ package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.lang.Opt; import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,8 +16,10 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.date.TimeUtil;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,8 +16,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.date.DateUtil;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,8 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.annotation.Alias; import org.dromara.hutool.core.annotation.Alias;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,8 +16,10 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.collection.ListUtil;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.json.JSONArray;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONObject;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,9 +16,10 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.convert.ConvertUtil;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.hutool.core.convert.ConvertUtil;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,8 +16,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.annotation.Alias;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.annotation.Alias;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,8 @@ package org.dromara.hutool.json.issues;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONArray;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,8 @@ package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.collection.ListUtil; import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.io.resource.ResourceUtil; import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;

View File

@ -19,6 +19,8 @@ package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.io.resource.ResourceUtil; import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.core.xml.XPathUtil; import org.dromara.hutool.core.xml.XPathUtil;
import org.dromara.hutool.core.xml.XmlUtil; import org.dromara.hutool.core.xml.XmlUtil;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.xml.JSONXMLSerializer; import org.dromara.hutool.json.xml.JSONXMLSerializer;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSON;
import org.dromara.hutool.json.JSONPrimitive;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;

View File

@ -18,6 +18,7 @@ package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.lang.mutable.MutableEntry; import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,8 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.serializer.JSONDeserializer;
import org.dromara.hutool.json.serializer.TypeAdapterManager;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -29,6 +32,15 @@ public class IssueI7FQ29Test {
@Test @Test
void toMapTest() { void toMapTest() {
// Class不添加默认反序列化器防止可能的安全问题
TypeAdapterManager.getInstance().register(Class.class, (JSONDeserializer<Class<?>>) (json, deserializeType) -> {
try {
return Class.forName(json.asJSONPrimitive().getValue().toString());
} catch (final ClassNotFoundException e) {
throw new RuntimeException(e);
}
});
final String jsonStr = "{\"trans_no\": \"java.lang.String\"}"; final String jsonStr = "{\"trans_no\": \"java.lang.String\"}";
final Map<String, Class<?>> map = JSONUtil.toBean(jsonStr, new TypeReference<Map<String, Class<?>>>() { final Map<String, Class<?>> map = JSONUtil.toBean(jsonStr, new TypeReference<Map<String, Class<?>>>() {
}); });

View File

@ -20,6 +20,7 @@ import org.dromara.hutool.core.lang.tuple.Pair;
import org.dromara.hutool.core.lang.tuple.Triple; import org.dromara.hutool.core.lang.tuple.Triple;
import org.dromara.hutool.core.lang.tuple.Tuple; import org.dromara.hutool.core.lang.tuple.Tuple;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -19,6 +19,8 @@ package org.dromara.hutool.json.issues;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSON;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.serializer.JSONDeserializer; import org.dromara.hutool.json.serializer.JSONDeserializer;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONObject;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -19,6 +19,7 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.io.resource.ResourceUtil; import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,8 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import lombok.ToString; import lombok.ToString;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Getter; import lombok.Getter;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONFactory;
import org.dromara.hutool.json.JSONObject;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,9 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.date.DateUtil; import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.json.JSONConfig;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.writer.NumberWriteMode; import org.dromara.hutool.json.writer.NumberWriteMode;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -17,6 +17,7 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -16,6 +16,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -18,6 +18,7 @@ package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -19,6 +19,8 @@ package org.dromara.hutool.json.issues;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.dromara.hutool.json.serializer.JSONDeserializer; import org.dromara.hutool.json.serializer.JSONDeserializer;
import org.dromara.hutool.json.serializer.TypeAdapterManager; import org.dromara.hutool.json.serializer.TypeAdapterManager;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;

View File

@ -17,6 +17,8 @@
package org.dromara.hutool.json.issues; package org.dromara.hutool.json.issues;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.Map; import java.util.Map;

View File

@ -14,8 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.dromara.hutool.json; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -14,11 +14,14 @@
* limitations under the License. * limitations under the License.
*/ */
package org.dromara.hutool.json; package org.dromara.hutool.json.issues;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.io.resource.ResourceUtil; import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.core.reflect.TypeReference; import org.dromara.hutool.core.reflect.TypeReference;
import org.dromara.hutool.json.JSONArray;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.JSONUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -14,15 +14,22 @@
* limitations under the License. * limitations under the License.
*/ */
package org.dromara.hutool.json; package org.dromara.hutool.json.issues;
import org.dromara.hutool.json.JSONFactory;
import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.serializer.JSONSerializer;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
public class Pr3507Test { public class Pr3507Test {
@Test @Test
void writeClassTest() { void writeClassTest() {
final JSONObject set = JSONUtil.ofObj().putObj("name", Pr3507Test.class); // 考虑安全问题不提供默认的Class的序列化器此处局部自定义
Assertions.assertEquals("{\"name\":\"org.dromara.hutool.json.Pr3507Test\"}", set.toString()); final JSONFactory factory = JSONFactory.of(null, null);
factory.register(Class.class, (JSONSerializer<Class<?>>) (bean, context) -> context.getOrCreatePrimitive(bean.getName()));
final JSONObject set = factory.ofObj().putObj("name", Pr3507Test.class);
Assertions.assertEquals("{\"name\":\"org.dromara.hutool.json.issues.Pr3507Test\"}", set.toString());
} }
} }