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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美透逼视频 | 动漫精品午夜在线播放 | 婷婷伊人综合亚洲综合网 | 日本www色视频成人免费 | 日本午夜大片免费观看视频 | 午夜勾魂曲 | 激情视频激情小说 | 午夜AV内射一区二区三区红桃视 | 999久久免费高清热精品 | 国产一级在线观看视频 | jux539原千岁在线播放 | 欧美在线一 | 母爱成瘾在线观看 | 国产成年人 | 午夜小视频免费 | 娇妻在床上迎合男人 | 香蕉91视频| 国产重口老太伦 | 春光乍泄在线 | 丰满大屁股美女一级毛片 | 国产资源站 | 欧美日韩一二三区免费视频观看 | 91精品国产麻豆国产自产在线 | 午夜视频网站 | 免费国产影视观看网站入口 | 国产精品福利在线观看秒播 | 国产精品99久久 | 婚前试爱免费看 | 国产中文在线 | 亚洲国产一区二区三区a毛片 | 91传媒制片厂制作传媒破解版 | 日本一卡二卡3卡四卡无卡网址 | 美女扒开腿让男人桶爽免费gif | 欧美日韩精品一区二区三区视频 | 情缘1完整版在线观看 | 欧美美女被艹 | 欧美一区二区日韩一区二区 | 久久国产精品人妻中文 | 国产精品久久国产精品99 | 免费在线看 | 欧美日韩一区二区三在线 |