`

BeanCopier系列之二:使用Converter

阅读更多
BeanCopier系列之一:特性测试
BeanCopier系列之三:缓存BeanCopier提升性能


  当源和目标类的属性类型不同时,不能拷贝该属性,此时我们可以通过实现Converter接口来自定义转换器:

源类和目标类:
public class AccountEntity {
	private int id;
	private Timestamp createTime;
	private BigDecimal balance;
	// Getters and setters are omitted
}

public class AccountDto {
	private int id;
	private String name;
	private String createTime;
	private String balance;
	// Getters and setters are omitted
}


1. 不使用Converter

public class BeanCopierConverterTest {

	@Test
	public void noConverterTest() {
		AccountEntity po = new AccountEntity();
		po.setId(1);
		po.setCreateTime(new Timestamp(10043143243L));
		po.setBalance(BigDecimal.valueOf(4000L));
		BeanCopier copier = BeanCopier.create(AccountEntity.class, AccountDto.class, false);
		AccountDto dto = new AccountDto();
		copier.copy(po, dto, null);
		Assert.assertNull(dto.getCreateTime()); // 类型不同,未拷贝
		Assert.assertNull(dto.getBalance()); // 类型不同,未拷贝
	}
}


2. 使用Converter

基于目标对象的属性出发,如果源对象有相同名称的属性,则调一次convert方法:

package net.sf.cglib.core;

public interface Converter {
    // value 源对象属性,target 目标对象属性类,context 目标对象setter方法名
    Object convert(Object value, Class target, Object context);
}


	@Test
	public void converterTest() {
		AccountEntity po = new AccountEntity();
		po.setId(1);
		po.setCreateTime(Timestamp.valueOf("2014-04-12 16:16:15"));
		po.setBalance(BigDecimal.valueOf(4000L));
		BeanCopier copier = BeanCopier.create(AccountEntity.class, AccountDto.class, true);
		AccountConverter converter = new AccountConverter();
		AccountDto dto = new AccountDto();
		copier.copy(po, dto, converter);
		Assert.assertEquals("2014-04-12 16:16:15", dto.getCreateTime());
		Assert.assertEquals("4000", dto.getBalance());
	}

	static class AccountConverter implements Converter {

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		@SuppressWarnings("rawtypes")
		@Override
		public Object convert(Object value, Class target, Object context) {
			if (value instanceof Integer) {
				return (Integer) value;
			} else if (value instanceof Timestamp) {
				Timestamp date = (Timestamp) value;
				return sdf.format(date);
			} else if (value instanceof BigDecimal) {
				BigDecimal bd = (BigDecimal) value;
				return bd.toPlainString();
			}
			return null;
		}
	}


注:一旦使用Converter,BeanCopier只使用Converter定义的规则去拷贝属性,所以在convert方法中要考虑所有的属性。
分享到:
评论

相关推荐

    pdf2word工具:Solid Converter PDF 6.0

    《Solid Converter PDF 6.0:高效便捷的PDF转Word工具》 在信息化时代,PDF文档因其优秀的格式保持能力和安全性,被广泛应用于各种场合。然而,有时我们需要将PDF文档转换为可编辑的Word文档,这时就需要借助PDF转...

    使用VMware Converter 3.0/4.0 迁移虚拟机

    标题“使用VMware Converter 3.0/4.0 迁移虚拟机”涉及的是将物理服务器(P2V)转换为虚拟机的过程,主要利用VMware提供的转换工具——VMware Converter。VMware Converter是一个强大的工具,允许用户将运行在传统...

    CodeConverter v1.0┊CodeConverter(Java)_Lite.zip

    工具提供以下14种转换功能:十进制转二进制、十进制转八进制、十进制转十六进制、二进制转十进制、二进制转十六进制、十六进制转十进制、十六进制转二进制;字符串转ASCII码、字符串转Unicode、字符串完全转Unicode...

    CodeConverter v1.0┊码制转换器┊CodeConverter(VB)_Full.zip

    工具提供以下14种转换功能:十进制转二进制、十进制转八进制、十进制转十六进制、二进制转十进制、二进制转十六进制、十六进制转十进制、十六进制转二进制;字符串转ASCII码、字符串转Unicode、字符串完全转Unicode...

    StarWind Converter

    9. **成本效益**:使用StarWind Converter进行虚拟机迁移,企业无需购买额外的硬件或软件许可证,从而降低了迁移成本。 10. **灾难恢复与备份**:转换功能也可以作为灾难恢复计划的一部分,通过将虚拟机备份到不同...

    pdf转word软件:Solid.Converter.PDF.v7.1.934完美中文版

    第二步:使用“注册补丁”文件夹中的文件替换掉安装目录中的同名源文件。默认安装目录在:C:\Program Files\SolidDocuments\Solid Converter PDF\SCPDF,将SCPDFCreator.dll和SdAppSrv.dll两个文件复制到安装目录下...

    CodeConverter v1.0┊CodeConverter(Java)_Full.zip

    工具提供以下14种转换功能:十进制转二进制、十进制转八进制、十进制转十六进制、二进制转十进制、二进制转十六进制、十六进制转十进制、十六进制转二进制;字符串转ASCII码、字符串转Unicode、字符串完全转Unicode...

    PowerConverter 汉化版

    二、使用PowerConverter的步骤 1. 安装与启动:下载并安装PowerConverter汉化版,打开软件后,用户会发现界面简洁明了,易于操作。 2. 添加文件:点击“添加”按钮,选择需要转换的WMA或MP3文件,软件会将其添加到...

    converter-en-6.3.0-20575345.exe

    《VMware Converter:高效P2V迁移利器》 VMware Converter是一款强大的物理到虚拟(P2V)迁移工具,其最新版本"VMware-converter-en-6.3.0-20575345.exe"专为IT专业人员设计,旨在帮助用户将物理服务器、操作系统...

    Autodesk FBX Converter

    6. 版权声明:Autodesk FBX Converter的使用受到了Autodesk公司的法律声明的约束,用户需要遵守这些声明,以免侵犯Autodesk的知识产权。 7. 商标注册:Autodesk公司拥有多个商标注册,例如Autodesk、123D、3ds Max...

    VMware vCenter Converter 指导手册

    在进行VMware vCenter Converter的使用之前,用户应该详细阅读并理解以上提供的各个知识点,以便能够有效地使用该工具,达到顺利迁移系统的目的。同时,用户还应关注VMware官方网站上提供的最新技术文档,以便获得...

    VMware vCenter Converter Standalone的使用 ,应用于各类虚拟机设备.docx

    VMware vCenter Converter Standalone 的使用和应用于各类虚拟机设备 VMware vCenter Converter Standalone 是 VMware 公司推出的虚拟机转换工具,旨在帮助用户快速、安全地将物理机或虚拟机转换为 VMware 格式的...

    Solid Converter PDF 3.0中文版

    通过使用Solid Converter PDF V3.0,用户可以轻松地将PDF格式的报告、论文、手册等转换为Word文档,便于编辑、注释和分享,这对于那些需要频繁处理PDF文档的工作环境,如教育、出版、设计等行业,尤其具有实用性。...

    Solid.Converter.PDF_V7(转换) PDF转换器

    在使用Solid Converter PDF时,用户需要注意以下几点: - 转换精度:尽管软件力求保持原始布局,但某些复杂的排版和图形可能无法完全还原。 - 版权问题:确保在转换受版权保护的PDF时遵循相关法律法规,尊重原作者...

    使用VMware-converter_对虚拟机进行V2V教程

    VMware vCenter Converter Standalone 软件进行...VMware vCenter Converter Standalone 软件是虚拟机迁移的不二之选。该软件提供了简洁的操作步骤和强大的功能,可以轻松地将虚拟机迁移到 VMware vSphere 环境中。

    Vmware Converter使用方法

    ### Vmware Converter使用方法详解 #### 一、引言 ...掌握Vmware Converter的使用方法,不仅能够提升IT运维效率,还能为企业节省成本,促进资源优化配置,是现代数据中心管理不可或缺的技能之一。

    VMware-converter-6.2.0-73483980.rar

    VMware vCenter Converter 是一款强大的工具,用于将现有的物理服务器,无论是基于Windows还是Linux操作系统,以及第三方虚拟化平台的映像格式,转换成VMware兼容的虚拟机。这个过程被称为虚拟化,它允许企业在虚拟...

    Solid_Converter_PDF

    二、Solid Converter PDF的优势 1. 高精度转换:Solid Converter PDF致力于保持原文档的格式和样式,使得转换后的文件几乎与原版无异。 2. 支持批量转换:用户可以一次性选择多个PDF文件进行转换,提高工作效率。 ...

    Solid Converter PDF(PDF转Word工具)

    Solid Converter PDF是一款强大的PDF转换工具,专为将PDF文件转换为可编辑的Microsoft Word文档而设计。这款软件提供了用户友好的界面和高效的转换能力,使得处理PDF文档变得更加便捷。以下是关于Solid Converter ...

    mixamo_converter.zip

    而当我们需要将Mixamo提供的动画导入到Unreal Engine 4(UE4)时,通常会涉及到一个关键步骤——使用Mixamo Converter。本文将详细讲解如何使用这个工具,以及在UE4中导入和管理Mixamo动画的相关知识点。 首先,...

Global site tag (gtag.js) - Google Analytics