From 90f929837043092de5c6833fd869616b4fa407e0 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 10 Jun 2022 22:38:38 +0800 Subject: [PATCH] fix --- .../core/bean/copier/BeanToMapCopier.java | 2 +- .../hutool/core/bean/copier/CopyOptions.java | 6 +++-- .../core/bean/copier/MapToBeanCopier.java | 2 +- .../copier/ValueProviderToBeanCopier.java | 14 +++++------ .../cn/hutool/core/bean/BeanUtilTest.java | 25 +++++++++++++++++++ 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanToMapCopier.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanToMapCopier.java index 72647f8a0..e3232a437 100755 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanToMapCopier.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanToMapCopier.java @@ -26,7 +26,7 @@ public class BeanToMapCopier extends AbsCopier { * 构造 * * @param source 来源Map - * @param target 目标Bean对象 + * @param target 目标Map对象 * @param targetType 目标泛型类型 * @param copyOptions 拷贝选项 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java index d0c3fc874..9e943877c 100755 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java @@ -226,7 +226,8 @@ public class CopyOptions implements Serializable { } /** - * 设置拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用 + * 设置拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用
+ * 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即fieldMapping中key为目标Bean的名称,而value是提供者中的key * * @param fieldMapping 拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用 * @return CopyOptions @@ -242,7 +243,8 @@ public class CopyOptions implements Serializable { /** * 设置字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等
* 此转换器只针对源端的字段做转换,请确认转换后与目标端字段一致
- * 当转换后的字段名为null时忽略这个字段 + * 当转换后的字段名为null时忽略这个字段
+ * 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即参数中key为目标Bean的名称,而返回值是提供者中的key,并且对值的修改无效
* * @param editor 字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等 * @return CopyOptions diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToBeanCopier.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToBeanCopier.java index c1333de48..0684f6082 100755 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToBeanCopier.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToBeanCopier.java @@ -68,7 +68,7 @@ public class MapToBeanCopier extends AbsCopier, T> { if(null == entry){ return; } - String sFieldName = entry.getKey(); + final String sFieldName = entry.getKey(); // 对key做转换,转换后为null的跳过 if (null == sFieldName) { return; diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/ValueProviderToBeanCopier.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/ValueProviderToBeanCopier.java index 02ae48fcb..052a25db8 100755 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/ValueProviderToBeanCopier.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/ValueProviderToBeanCopier.java @@ -51,11 +51,6 @@ public class ValueProviderToBeanCopier extends AbsCopier extends AbsCopier entry = copyOptions.editField(tFieldName, sValue); + final MutableEntry entry = copyOptions.editField(tFieldName, null); if(null == entry){ return; } @@ -75,7 +69,11 @@ public class ValueProviderToBeanCopier extends AbsCopier filedMap= new HashMap<>(); + filedMap.put("name", "sourceId"); + copyOptions.setFieldMapping(filedMap); + final TestPojo pojo = BeanUtil.fillBean(new TestPojo(), new ValueProvider() { + final HashMap map = new HashMap<>(); + { + map.put("sourceId", "123"); + } + @Override + public Object value(final String key, final Type valueType) { + return map.get(key); + } + + @Override + public boolean containsKey(final String key) { + return map.containsKey(key); + } + }, copyOptions); + Assert.assertEquals("123", pojo.getName()); + } }