一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - springboot~ObjectMapper~dto到entity的自動賦值

springboot~ObjectMapper~dto到entity的自動賦值

2021-05-21 11:19張占嶺 Java教程

這篇文章主要介紹了springboot~ObjectMapper~dto到entity的自動賦值,本文分三種情況給大家介紹,需要的朋友可以參考下

實體與dto自動賦值

在開發的過程中,實體之間相互賦值是很正常的事,但是我們一般的方法都通過set和get方法來進行的,如果要賦值的字段少那還行,但是需要賦值的字段超過10個,那就是個災難,你會看到整屏代碼中全是set和get方法。

  1. 兩個實體屬性字段幾乎完全相同
  2. 兩個字體有部分字段相同
  3. 源實體只有部分字段賦值,目標實體有完整的值

第一種情況

對于第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的自動賦值,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/lori/archive/2018/08/01/9400510.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91香蕉影院| 日本又黄又裸一级大黄裸片 | 欧美一区二区三区综合色视频 | 俄罗斯烧性春三级k8播放 | 国产精品四虎在线观看免费 | 911色_911色sss在线观看 | 奇米狠狠色 | heyzo在线观看 | 九草视频在线 | 天天摸天天操天天爽 | 欧美日韩国产一区二区三区在线观看 | 国产免费资源高清小视频在线观看 | 午夜福利理论片高清在线 | 肥胖老寡妇做性 | 日本加勒比在线精品视频 | 色姑娘色综合 | 日本免费一区二区三区a区 日本免费三片在线观看 | 护士的小嫩嫩好紧好舒服 | 久久精品免视看国产 | 免费亚洲成人 | 精品国产午夜久久久久九九 | 全彩孕交漫画福利啪啪吧 | 91人成网站色www | 高清不卡日本v在线二区 | 青青网在线视频 | 高清欧美不卡一区二区三区 | 国产精品国色综合久久 | 天堂在线观看中文字幕 | 俺去俺去啦最新官网在线 | 欧美一级在线播放 | 婷婷丁香视频 | 日本三级香港三级久久99 | 精品一区二区三区自拍图片区 | 国产午夜精品久久理论片小说 | 日本69sex护士www | 娇喘高潮教室h | 日韩一级精品视频在线观看 | 果冻传媒在线视频播放观看 | 午夜影院h| 国产成人免费片在线视频观看 | 国产成人影院在线观看 |