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方法中要考虑所有的属性。
BeanCopier系列之二:使用Converter相关推荐
- 从产品展示页面谈谈Hybris系列之二: DTO, Converter和Populator
文章作者:张健(Zhang Jonathan) 上一篇文章 从产品展示页面谈谈Hybris的特有概念和设计结构 我们讲解了Hybris一些特有的概念以及大体架构,并且介绍了Facade层里是如何定义D ...
- 经典算法研究系列:二、Dijkstra 算法初探
经典算法研究系列:二.Dijkstra 算法初探 July 二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...
- 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析
摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark ...
- Skype for business混合部署系列之二自定义拓扑信息
Skype for business混合部署系列之二自定义拓扑信息 此次部署前端服务器共3台,后端数据库2台采用always on方式,2台SQL Server服务器已经安装完成,在这里不做文档,本章 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...
- 深入理解 Linux Cgroup 系列(二):玩转 CPU
原文链接:深入理解 Linux Cgroup 系列(二):玩转 CPU 上篇文章主要介绍了 cgroup 的一些基本概念,包括其在 CentOS 系统中的默认设置和控制工具,并以 CPU 为例阐述 c ...
- 【冰极峰教程系列之二】:牢不可破的九宫格布局
原创:冰极峰 转载请注明出处 时间:2009年6月22日 8:40:16 冰极峰教程系列之一:九宫格基本布局 冰极峰教程系列之二:牢不可破的九宫格布局 冰极峰教程系列之三:三层分离的完美九宫格 冰极峰 ...
- WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现...
原文:WPF技术触屏上的应用系列(二): 嵌入百度地图.API调用及结合本地数据库在地图上进行自定义标点的实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系 ...
- MySQL优化系列(二)--查找优化(1)(非索引设计)
MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...
最新文章
- flask 检测post是否为空_用Flask和Vue制作一个单页应用(五)
- Activity动画效果笔记
- git概念篇(remote,base,local)的含义
- 5.字符串:各种奇葩的内置方法/格式化
- Shell脚本语言与编译型语言的差异
- ZOJ 4028 15th浙江省省赛E. LIS(神奇贪心)
- Have Fun with Numbers及循环链表(约瑟夫问题)
- javascript的caller,callee,call,apply
- matlab EOF程序
- java手机连点脚本_自动连点器app下载 自动连点器(屏幕点击器) for Android v1.0 安卓版 下载-脚本之家...
- 软件项目的需求变更及对策
- CAD软件中怎么创建异形视口?
- instagram获取图片地址和视频地址
- 在linux下恶臭hellotext中作用的?,《Linux内核与程序设计》实验学习笔记
- Verilog语言基础语法
- 判断当前页面是否在微信内置浏览器中打开
- 保姆级教程:群晖nas内网穿透之ipv6/ipv4 ddns+frp双管齐下!
- 字符串水题——相对分子质量
- ppt演示文档如何瘦身
- 基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的教室图书馆座位预约小程序系统设计与实现
热门文章
- java 删除本地文件夹或文件
- java几个注解的作用及比较(@RestController、@Controller、@ResponseBody、@RequestBody等)
- Win10安装nodejs 错误代码2502,2503
- 微信小程序——剪贴板 的使用
- 大数据剖析热点新闻:996、巴黎圣母院、奔驰维权为什么成为本周热搜
- UE4|Sequence Recorder 序列记录使用方法
- 外罚函数法(一):外罚函数的构造
- python-yaml文件使用(PyYAML)
- 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels
- FL Studio20.9安装汉化版水果下载教程