您的位置:首页 > 运维架构

两实体之间属性字段的自动赋值

2018-03-21 13:59 921 查看
在开发的过程中,实体之间相互赋值是很正常的事,但是我们一般的方法都通过set和get方法来进行的,如果要赋值的字段少那还行,但是需要赋值的字段超过10个,那就是个灾难,你会看到整屏代码中全是set和get方法。

为了解决这个问题,请上今天的主角,ObjectMapper,全路径为

com.fasterxml.jackson.databind.ObjectMapper

首先,我们要区分实体之间的属性拷贝是哪种性质的

1、两个实体属性字段几乎完全相同

2、两个字体有部分字段相同

对于第1点来说,我们用到最多的就是entity和dto之间的转换了,这个我们可以使用Spring的工具类BeanUtils来解决,这里要注意的一点是,第一个参数是源,第二个参数是目标。

import org.springframework.beans.BeanUtils;

BeanUtils.copyProperties(origin, target);

但是对于第2点来说,就没有那么简单了,再使用BeanUtils已经不能满足我们的需要了。

我们可以使用jackson的ObjectMapper

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.jd.fastjson.JSON;

ObjectMapper objectMapper = new ObjectMapper();
//配置该objectMapper在反序列化时,忽略目标对象没有的属性。凡是使用该objectMapper反序列化时,都会拥有该特性。
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//读入需要更新的目标实体
ObjectReader objectReader = objectMapper.readerForUpdating(target);
//将源实体的值赋值到目标实体上
objectReader.readValue(JSON.toJSONString(source));

这个只会将两个实体中,属性名相同的名称进行赋值,如果要对不同名称的属性进行赋值还请手动补值。

上面的方法可以大大减少代码的编写,同时提高代码的效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  beanCopy
相关文章推荐