自定义BeanUtils
package com.icil.booking.service.util; import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.icil.fw.logging.ICILLogger;
import com.icil.fw.logging.ICILLoggerFactory; import net.sf.cglib.beans.BeanCopier;
import net.sf.cglib.core.Converter; public class CglibBeanCopierUtils { private static final ICILLogger logger = ICILLoggerFactory
.getInstance(CglibBeanCopierUtils.class); public static Map<String, BeanCopier> beanCopierMap = new HashMap<String, BeanCopier>(); /**
* @Title: copyProperties
* @Description: TODO(bean属性转换)
* @param source
* 资源类
* @param target
* 目标类
* @author yushaojian
* @date 2015年11月25日下午4:56:44
*/
public static void copyProperties(Object source, Object target) {
String beanKey = generateKey(source.getClass(), target.getClass());
BeanCopier copier = null;
if (!beanCopierMap.containsKey(beanKey)) {
copier = BeanCopier.create(source.getClass(), target.getClass(),
true);
beanCopierMap.put(beanKey, copier);
} else {
copier = beanCopierMap.get(beanKey);
}
copier.copy(source, target, new Converter() {
private final Map<String, BeanCopier> bcMap = new HashMap<String, BeanCopier>(); @Override
public Object convert(Object sourcePropVal, Class targetPropClazz,
Object targetSetMethodName) {
/*logger.debug("======>>>>> sourcePropVal " + sourcePropVal
+ "======>>>>>targetPropClazz " + targetPropClazz
+ "======>>>>>targetSetMethodName "
+ targetSetMethodName);*/
/*if (BigDecimal.class.equals(targetPropClazz)) {
BigDecimal bd = null;
if (sourcePropVal != null && !"".equals(sourcePropVal)) {
bd = new BigDecimal(sourcePropVal.toString());
bd=bd.setScale(4, BigDecimal.ROUND_HALF_UP);
}
return bd;
} else if (Integer.class.equals(targetPropClazz)) {
Integer value = null;
if (sourcePropVal != null && !"".equals(sourcePropVal)) {
value = Integer.parseInt(sourcePropVal.toString());
}
return value;
} else if (Date.class.equals(targetPropClazz)) {
Date date = null;
if(sourcePropVal!=null && !"".equals(sourcePropVal)){
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
try {
date = sdf.parse((String)sourcePropVal);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return date;
}else if (int.class.equals(targetPropClazz)){
int value =0 ;
if (sourcePropVal != null && !"".equals(sourcePropVal)) {
value = Integer.parseInt(sourcePropVal.toString());
}
return value;
}*/
return sourcePropVal;
}
});
} protected static Object convertListGenericType(Object sourcePropVal) {
// TODO Auto-generated method stub
return null;
} private static String generateKey(Class<?> class1, Class<?> class2) {
return class1.toString() + class2.toString();
}
}
自定义BeanUtils的更多相关文章
- BeanUtils制作自定义的转换器
一般来说,BeanUtils自带的Converter基本上可以满足我们在开发过程中的使用了,然而很多时候我们还是需要自定义一些转换器. MyBean.java package beanutils; i ...
- SpringBoot08 请求方式、参数获取注解、参数验证、前后台属性名不一致问题、自定义参数验证注解、BeanUtils的使用
1 请求方式 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 1 ...
- java jdbc的优化之BeanUtils组件
1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils ...
- BeanUtils
BeanUtils包的使用 BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: ...
- BeanUtils: 威力和代价(转载)
转自:http://blog.sina.com.cn/s/blog_ab3fbf1b0101jbxz.html Apache Jakarta Commons项目非常有用.我曾在许多不同的项目上或直接或 ...
- atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug
atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&qu ...
- 15、Jdbc的优化(BeanUtils组件)
Jdbc的优化! BeanUtils组件 自定义一个持久层的框架 DbUtils组件 案例优化 1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apach ...
- BeanUtils框架的简单运用
Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单.易用的API操作Bean的属性——BeanUtils Beanutils工具包的常用类: •BeanUt ...
- BeanUtils组件
引入jar包(需要引入依赖的日志jar包) Person p = new Person(); p.setName("Daisy"); p.setAge(12); //对象的copy ...
随机推荐
- [UE4]虚幻4的智能指针
虚幻自己实现了一套智能指针系统,为了跨平台. 指针: 占用8个字节,4个字节的Object指针,4字节的引用计数控制器的指针, 引用计数控制器需要12字节, 一个C++的Object指针4字节,一个共 ...
- WinFrom调试时,弹出你正在调试发布的版本
把下图这里改成DEBUG就好 还有项目属性里面也要改一下 问题解决!
- 《DSP using MATLAB》Problem 4.10
今天擦完了玻璃,尽管有地方不那么明亮干净,冷风中瑟瑟发抖,年也快临近了. 代码是从网上找的, function [p, np, r, nr] = deconv_m(b, nb, a, na) % Mo ...
- signal信号
1.signal信号调试 http://hongjiang.info/shell-script-background-process-ignore-sigint/
- 二叉搜索树的第k大的节点
题目 给定一颗二叉搜索树,请找出其中的第k大的结点. 思路 如果中序遍历一棵二叉搜索树,遍历序列的数值则是递增排序,因此只需中序遍历一个二叉搜索树即可. #include <iostream&g ...
- 自适应巡航控制系统——ACC
ACC(Adaptive Cruise Control)自适应巡航控制系统(以下简称ACC)是一种基于传感器识别技术而诞生的智能巡航控制,相比只能根据驾驶者设置的速度进行恒定速度巡航的传统巡航控制系统 ...
- Promise 知识点
.done() Promise 对象的回调链,不管以then方法或catch方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到(因为 Promise 内部的错误不会冒泡到全局).因此,我们可以提供 ...
- 阿里巴巴Java开发手册-并发处理
1. [强制]获取单例对象需要保证线程安全,其中的方法也要保证线程安全.说明:资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯.正例: ...
- Asp.Net Core MVC框架内置过滤器
第一部分.MVC框架内置过滤器 下图展示了Asp.Net Core MVC框架默认实现的过滤器的执行顺序: Authorization Filters:身份验证过滤器,处在整个过滤器通道的最顶层.对应 ...
- meta标签和JS实现页面刷新与重定向
下面列了五个例子来详细说明,这几个例子的主要功能是:在5秒后,自动跳转到同目录下的hello.html(根据自己需要自行修改)文件.1) html的实现 1 2 3 4 5 6 <head& ...