BeanUtils优雅的set和get赋值操作

BeanUtils优雅的set和get赋值操作

今天博主任务是webservice接口的开发,拿到甲方给过来的接口文档,里面一百多个字段。
需要赋值操作~

需求场景

今天博主任务是webservice接口的开发,拿到甲方给过来的接口文档,里面一百多个字段。于是打开之前的别人的webservice接口,其中moldrepairSync方法,

如下:
BeanUtils优雅的set和get赋值操作_第1张图片
居然长达100多个字段,挨个set,get赋值,
BeanUtils优雅的set和get赋值操作_第2张图片
OMG,当时我和我的小伙伴都惊呆了~
这写完怕是手都断了~~~~

思考

我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。大量get/set对于这种操作,一般jar包里面都封装好了。
于是查找了一下,,Spring与Apache中都有一个BeanUtils工具类,关于区别,最后讲。

解决

BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。

新建一个类,里面写个moldrepairSync方法,调用BeanUtils.copyProperties方法即可完成set/get操作。(我的appBody.Mold_Repair_ITEM是实体类,MoldRepairITEM是个数组,MoldRepair也是个实体类)

源码如下:

// 导入包
import org.springframework.beans.BeanUtils;

//方法内部:
		MoldRepair moldRepair = null;
		for (MoldRepairITEM item : appBody.Mold_Repair_ITEM) {
			moldRepair = new MoldRepair();
			BeanUtils.copyProperties(item,moldRepair); //复制:1.原对象 2.目标对象
			// 时间格式需要工具类转换,是yyyy-MM-dd HH:mm:ss
	moldRepair.setFplandate(DateUtils.str2Date(item.fplandate, DateUtils.datetimeFormat));
			}

如图:BeanUtils优雅的set和get赋值操作_第3张图片
调用的是copyProperties()方法。

注意:

如果item和moldRepair(即1.目标对象 2.原对象)间存在【名称不相同的属性】,则BeanUtils不对这些属性进行处理,需要手动处理

例如:

item类里面有个createDate 创建时间字段,而moldRepair里面是createTime字段。BeanUtils.copyProperties()不会对此字段做任何处理。必须要自己手动处理,先复制在手动处理。

Spring与Apache中BeanUtils的区别

值得注意的是,使用BeanUtils,在导包的时候,你会发现有两个import对象。
分别是:Spring和Apache。

区别:

1.pring和apache的BeanUtils.copyProperties()方法,其中【方法源和目标】的参数位置正好相反,导包和调用时要注意一下。

2.关于日期类型的数据处理不同。【很多博客都没有提及到的。】

对比:

一,Apache下的包org.apache.commons.beanutils.BeanUtils;

BeanUtils.copyProperties(A, B);  // 把B的值赋给A

结论:Apache的BeanUtils.copyProperties 可以自动 将java.util.Date / java.sql.Date 类型转换成String类型,也可以自动 将 java.util.Date / java.sql.Date类型转换成String类型。

二,Spring下的包 org.springframework.beans.BeanUtils;

BeanUtils.copyProperties(B,A); // 把B的值赋给A

结论:org.springframework.beans.BeanUtils.copyProperties 不可以 将java.util.Date / java.sql.Date 类型转换成String类型,也不可以将String类型转换成java.util.Date / java.sql.Date类型。
【所以自己写一个日期和字符串的时间转换工具类就可以了。】


好了,本文到此结束~

你可能感兴趣的:(开发工具软件,webservice接口开发)