From 48cc7f5b57731684c34f956fe6c88835007db94b Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 6 Jul 2024 11:36:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBeanUtil.copyProperties?= =?UTF-8?q?=E4=B8=ADmapToMap=E6=97=B6key=E8=A2=AB=E8=BD=AC=E4=B8=BAString?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../core/bean/copier/MapToMapCopier.java | 18 ++++++----- .../cn/hutool/core/bean/Issue3645Test.java | 30 +++++++++++++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/bean/Issue3645Test.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 092c9abcd..2ff2430d5 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### 🐞Bug修复 * 【core 】 修复因RFC3986理解有误导致的UrlPath处理冒号转义问题(issue#IAAE88@Gitee) * 【core 】 修复FileUtil.cleanEmpty无法正确清空递归空目录问题(pr#1233@Gitee) +* 【core 】 修复BeanUtil.copyProperties中mapToMap时key被转为String问题(issue#3645@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.8.29(2024-07-03) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToMapCopier.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToMapCopier.java index 4900aee51..ca443c608 100755 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToMapCopier.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToMapCopier.java @@ -42,18 +42,20 @@ public class MapToMapCopier extends AbsCopier { return; } - final String sKeyStr = copyOptions.editFieldName(sKey.toString()); - // 对key做转换,转换后为null的跳过 - if (null == sKeyStr) { - return; + if(sKey instanceof String){ + sKey = copyOptions.editFieldName((String) sKey); + // 对key做转换,转换后为null的跳过 + if (null == sKey) { + return; + } } // 忽略不需要拷贝的 key, - if (false == copyOptions.testKeyFilter(sKeyStr)) { + if (false == copyOptions.testKeyFilter(sKey)) { return; } - final Object targetValue = target.get(sKeyStr); + final Object targetValue = target.get(sKey); // 非覆盖模式下,如果目标值存在,则跳过 if (false == copyOptions.override && null != targetValue) { return; @@ -64,11 +66,11 @@ public class MapToMapCopier extends AbsCopier { if (null != typeArguments) { //sValue = Convert.convertWithCheck(typeArguments[1], sValue, null, this.copyOptions.ignoreError); sValue = this.copyOptions.convertField(typeArguments[1], sValue); - sValue = copyOptions.editFieldValue(sKeyStr, sValue); + sValue = copyOptions.editFieldValue(sKey.toString(), sValue); } // 目标赋值 - target.put(sKeyStr, sValue); + target.put(sKey, sValue); }); return this.target; } diff --git a/hutool-core/src/test/java/cn/hutool/core/bean/Issue3645Test.java b/hutool-core/src/test/java/cn/hutool/core/bean/Issue3645Test.java new file mode 100644 index 000000000..6f69d0201 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/bean/Issue3645Test.java @@ -0,0 +1,30 @@ +package cn.hutool.core.bean; + +import lombok.Data; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertNotNull; + +public class Issue3645Test { + @Test + public void copyPropertiesTest() { + User p = new User(); + p.setUserId(123L); + + Map map = new HashMap<>(); + map.put(123L,p); + + Map m = new HashMap<>(); + BeanUtil.copyProperties(map, m); + User u = m.get(123L); + assertNotNull(u); + } + + @Data + static class User{ + private Long userId; + } +}