From 50807c84d65a630ad1e021ca248088e48b6576e1 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 24 Nov 2024 16:01:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DJSONUtil.toBean()=E4=B8=AD?= =?UTF-8?q?=E5=B0=86JSON=E6=95=B0=E7=BB=84=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E8=BD=ACMap=E5=AF=B9=E8=B1=A1=E8=BF=94=E5=9B=9E=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E9=97=AE=E9=A2=98(issue#3795@Github)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../hutool/core/convert/impl/MapConverter.java | 5 +++++ .../test/java/cn/hutool/json/Issue3795Test.java | 17 +++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 hutool-json/src/test/java/cn/hutool/json/Issue3795Test.java diff --git a/CHANGELOG.md b/CHANGELOG.md index ddf320244..a1024b3ef 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ * 【extra 】 修复MailUtil发送html格式邮件无法正常展示图片问题(pr#1279@Gitee) * 【core 】 【可能的向下兼容问题】修复双引号转义符转义错误问题,修改规则后,对非闭合双引号字段的策略变更,如"aa,则被识别为aa(issue#IB5UQ8@Gitee) * 【extra 】 修复Sftp中传入Session重连时逻辑错误问题(issue#IB69U8@Gitee) +* 【json 】 修复JSONUtil.toBean()中将JSON数组字符串转Map对象返回错误问题(issue#3795@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.33(2024-11-05) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java index 72b4c32b7..f01a46c04 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java @@ -74,6 +74,11 @@ public class MapConverter extends AbstractConverter> { } convertMapToMap((Map) value, map); } else if (BeanUtil.isBean(value.getClass())) { + if(value.getClass().getName().equals("cn.hutool.json.JSONArray")){ + // issue#3795 增加JSONArray转Map错误检查 + throw new UnsupportedOperationException(StrUtil.format("Unsupported {} to Map.", value.getClass().getName())); + } + map = BeanUtil.beanToMap(value); // 二次转换,转换键值类型 map = convertInternal(map); diff --git a/hutool-json/src/test/java/cn/hutool/json/Issue3795Test.java b/hutool-json/src/test/java/cn/hutool/json/Issue3795Test.java new file mode 100644 index 000000000..6e0ef606f --- /dev/null +++ b/hutool-json/src/test/java/cn/hutool/json/Issue3795Test.java @@ -0,0 +1,17 @@ +package cn.hutool.json; + +import cn.hutool.core.lang.TypeReference; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +public class Issue3795Test { + @Test + void toBeanTest() { + String fieldMapping = "[{\"lable\":\"id\",\"value\":\"id\"},{\"lable\":\"name\",\"value\":\"name\"},{\"lable\":\"age\",\"value\":\"age\"}]"; + Assertions.assertThrows(UnsupportedOperationException.class, ()->{ + JSONUtil.toBean(fieldMapping, new TypeReference>() {}, false); + }); + } +}