diff --git a/CHANGELOG.md b/CHANGELOG.md index eaf1a3f54..39bdff81f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ * 【poi 】 修复使用BigWriter写出,ExcelWriter修改单元格值失败的问题(issue#I3VSDO@Gitee) * 【jwt 】 修复Hmac算法下生成签名是hex的问题(issue#I3W6IP@Gitee) * 【core 】 修复TreeUtil.build中deep失效问题(issue#1661@Github) +* 【json 】 修复XmlUtil.xmlToBean判断问题(issue#1663@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java index 659484535..fbb5fd3e1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java @@ -1024,7 +1024,11 @@ public class XmlUtil { public static T xmlToBean(Node node, Class bean) { final Map map = xmlToMap(node); if (null != map && map.size() == 1) { - return BeanUtil.toBean(map.get(bean.getSimpleName()), bean); + final String simpleName = bean.getSimpleName(); + if(map.containsKey(simpleName)){ + // 只有key和bean的名称匹配时才做单一对象转换 + return BeanUtil.toBean(map.get(simpleName), bean); + } } return BeanUtil.toBean(map, bean); } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java index ddeac0099..6ddd5cc27 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java @@ -1,5 +1,6 @@ package cn.hutool.core.util; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Console; @@ -214,6 +215,29 @@ public class XmlUtilTest { Assert.assertEquals(testBean.getBankCode(), testBean2.getBankCode()); } + @Test + public void xmlToBeanTest2(){ + //issue#1663@Github + String xmlStr = "02"; + + Document doc = XmlUtil.parseXml(xmlStr); + + // 标准方式 + Map map = XmlUtil.xmlToMap(doc.getFirstChild()); + SmsRes res = new SmsRes(); + BeanUtil.fillBeanWithMap(map, res, true); + + // toBean方式 + SmsRes res1 = XmlUtil.xmlToBean(doc.getFirstChild(), SmsRes.class); + + Assert.assertEquals(res.toString(), res1.toString()); + } + + @Data + static class SmsRes { + private String code; + } + @Test public void cleanCommentTest() { final String xmlContent = "hutooljava"; diff --git a/hutool-json/src/test/java/cn/hutool/json/XMLTest.java b/hutool-json/src/test/java/cn/hutool/json/XMLTest.java index ec8c14d8f..920ec3743 100644 --- a/hutool-json/src/test/java/cn/hutool/json/XMLTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/XMLTest.java @@ -13,4 +13,5 @@ public class XMLTest { final String s = JSONUtil.toXmlStr(put); Assert.assertEquals("你好<键2>test", s); } + }