实体与dto自动赋值
在开发的过程中,实体之间相互赋值是很正常的事,但是我们一般的方法都通过set和get方法来进行的,如果要赋值的字段少那还行,但是需要赋值的字段超过10个,那就是个灾难,你会看到整屏代码中全是set和get方法。
- 两个实体属性字段几乎完全相同
- 两个字体有部分字段相同
- 源实体只有部分字段赋值,目标实体有完整的值
第一种情况
对于第1点来说,我们用到最多的就是entity和dto之间的转换了,这个我们可以使用spring的工具类beanutils来解决,这里要注意的一点是,==第一个参数是源,第二个参数是目标==。
?
|
1
2
|
import org.springframework.beans.beanutils;
beanutils.copyproperties(origin, target);
|
第二种情况
但是对于第2点来说,就没有那么简单了,再使用beanutils已经不能满足我们的需要了。
我们可以使用jackson的objectmapper
?
|
1
2
3
4
5
6
7
8
9
10
11
|
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));
|
我们总结一下objectmapper的过滤参数:
?
|
1
2
3
4
5
6
7
8
9
10
|
/*
通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
include.include.always 默认
include.non_default 属性为默认值不序列化
include.non_empty 属性为 空(“”) 或者为 null 都不序列化
include.non_null 属性为null 不序列化
*/
objectmapper.setserializationinclusion(jsoninclude.include.non_default);
string outjson = objectmapper.writevalueasstring(productdetail);
//上面代码里,outjson的值将会过滤掉只有默认值的属性
|
第三种情况
本情况主要对于从dto到entity转换过程中出现 ,比如一个put操作,前端可能只修改某几个属性,而在后端处理时也只希望处理这几个被赋值的属性,这时我们使用下面的方法:
?
|
1
2
3
4
5
6
7
8
9
10
11
|
@requestmapping(value = "/{id}", method = requestmethod.put)
public httpentity update(@pathvariable int id, @requestbody productdetail productdetail)
throws ioexception {
productdetail existing = repository.findbyid(id).get();
objectmapper.setserializationinclusion(jsoninclude.include.non_default);
string outjson = objectmapper.writevalueasstring(productdetail);
objectreader objectreader = objectmapper.readerforupdating(existing);
objectreader.readvalue(outjson);
repository.save(existing);
return new responseentity<>(existing, httpstatus.accepted);
}
|
通过objectmapper的使用,确实让我们少写很多重复的代码。
总结
以上所述是小编给大家介绍的springboot~objectmapper~dto到entity的自动赋值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!
原文链接:https://www.cnblogs.com/lori/archive/2018/08/01/9400510.html
相关文章
猜你喜欢
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-29 101
-
2025-06-04 77
-
2025-06-05 19
-
2025-06-04 28
-
2025-06-04 63
热门评论

