修复JSONUtil序列化和反序列化预期的结果不一致问题

This commit is contained in:
Looly 2024-03-06 17:24:34 +08:00
parent 0a8af560ab
commit 051ce35828
4 changed files with 62 additions and 1 deletions

View File

@ -123,7 +123,8 @@ public class RegisterConverter implements Converter, Serializable {
* @return 转换器
*/
public Converter getDefaultConverter(final Type type) {
return (null == defaultConverterMap) ? null : defaultConverterMap.get(TypeUtil.getClass(type));
final Class<?> key = null == type ? null : TypeUtil.getClass(type);
return (null == defaultConverterMap || null == key) ? null : defaultConverterMap.get(key);
}
/**

View File

@ -171,6 +171,12 @@ public class JSONValueMapper {
return new JSONObject(object, jsonConfig);
}
// pr#3507
// Class类型保存类名
if (object instanceof Class) {
return ((Class<?>) object).getName();
}
// 枚举类保存其字符串形式4.0.2新增
if (object instanceof Enum
// Java内部类不做转换

View File

@ -0,0 +1,24 @@
package org.dromara.hutool.json;
import lombok.Data;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class Issue3504Test {
@Test
public void test3504() {
final JsonBean jsonBean = new JsonBean();
jsonBean.setName("test");
jsonBean.setClasses(new Class[]{String.class});
final String huToolJsonStr = JSONUtil.toJsonStr(jsonBean);
final JsonBean bean = JSONUtil.toBean(huToolJsonStr, JsonBean.class);
Assertions.assertNotNull(bean);
Assertions.assertEquals("test", bean.getName());
}
@Data
public static class JsonBean {
private String name;
private Class<?>[] classes;
}
}

View File

@ -0,0 +1,30 @@
package org.dromara.hutool.json;
import lombok.Data;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class Issue3506Test {
@Test
void toBeanTest() {
final Languages languages = new Languages();
languages.setLanguageType(Java.class);
final String hutoolJSONString = JSONUtil.toJsonStr(languages);
final Languages bean = JSONUtil.toBean(hutoolJSONString, Languages.class);
Assertions.assertNotNull(bean);
Assertions.assertEquals(bean.getLanguageType(), Java.class);
}
@Data
public static class Languages {
private Class<? extends Language> languageType;
}
public interface Language {
}
public static class Java implements Language {
}
}